ANYDATA с коллекциями на основе типа строки - PullRequest
4 голосов
/ 04 июля 2011

Я только что обнаружил у Oracle ANYDATA и ANYTYPE и подумал, что было бы полезно обобщить какой-нибудь очень повторяющийся код, который у меня есть. Я попробовал очень простой пример кода, который выглядит следующим образом:

declare
    --simple test query
    cursor myCurs is
        select sysdate from dual;

    type t_arr is table of myCurs%rowtype;
    v_arr t_arr;

    v_anydata ANYDATA;    
begin

    open myCurs;
    fetch myCurs bulk collect into v_arr;
    close myCurs;

    dbms_output.put_line(v_arr.count || ' records');

    v_anydata := ANYDATA.convertCollection(v_arr);
    dbms_output.put_line(anydata.gettypename(v_anydata));

end;
/

Запуск этого кода выдает ошибку «ORA-22370: неправильное использование метода ORA-22370, неправильное использование метода ConvertCollection» (Да, на самом деле оно повторяется ORA-22370).

Мой вопрос: возможно ли использовать ANYDATA для коллекций типов строк? Я спрашиваю об этом, потому что все примеры, которые я видел для ANYDATA (до сих пор) с коллекциями, используют типы объектов, ни один не использует типы строк, но я не видел ничего (пока), который явно говорит, что типы строк не могут использоваться.

Моя цель состояла в том, чтобы очистить некоторый очень повторяющийся код массового сбора / вставки, который делает одно и то же снова и снова, но с разными курсорами для разных таблиц.

(Oracle 10g)

1 Ответ

5 голосов
/ 04 июля 2011

ANYDATA работает с типом данных SQL, т. Е. Всем, что можно использовать для определения столбца таблицы.

% ROWTYPE является конструкцией PL / SQL и поэтому не распознается механизмом SQL. Если вы подумаете о динамической природе% ROWTYPE, вы сможете понять, почему.


Желание убрать повторяющийся код - благородная идея. Ранее я реализовал процессор ETL в типах SQL, которые использовали супертип Object для управления общей обработкой и подтипы для выполнения кода, специфичного для таблицы (например, вставок). Эти подтипы являются полностью генерируемыми: не такими удобными, как динамическая реализация% ROWTYPE, но все же достаточно простыми.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...