Здравствуйте, Denis Popov, Вы писали:
DP>Здравствуйте, SHorrty, Вы писали:
SH>>Здравствуйте, Denis Popov, Вы писали:
DP>>>Ну да: есть функция, возвращающая объектную таблицу. Ее результат можно подсунуть тому же DBMS_XMLGEN:
DP>>>DP>>>select dbms_xmlgen.getXML('select * from table(cast(my_function as my_table_type))') xml from dual;
DP>>>
SH>>Ок. Это я так понимаю, мы в PIPELINE упираемся...
DP>PIPELINED-функции в Oracle 9i появились, а вышеприведенный код пройдет начиная с Oracle8i. Можно попытаться сделать запрос прямо из переменной типа "Объектная таблица", описаной, к примеру, в спецификации пакета. Надо будет проверить, допустимо ли это.
SH>>А если вернуться к произвольным коллекциям, с типом не хранимым в БД?
DP>А где хранится описание этой коллекции, в каком виде?
Где угодно. Не обязательно, что она объявлена в спецификации.
Вообщем Суть: программер хранит нужные ему данные в созданной под себя коллекции, ему нужно представить эту коллекцию в виде XML:
DECLARE
/* Типы */
TYPE T_REC IS RECORD(n NUMBER, d DATE, с VARCHAR2(300));
TYPE T_TAB IS TABLE OF T_REC;
/* Переменные */
v_Tmp T_TAB;
l_Xml sys.XmlType;
BEGIN
/*
как-то там заполняем таблицу v_Tmp
*/
-- Хотим конвертить v_Tmp в XML
l_Xml := convert_function(v_Tmp);
END;
Встает вопрос, как так можно (и возможно ли вообще ?) организовать функцию convert_function (либо пакет аналогичной направленности) ?