Вернуть ассоциативный массив Oracle из функции

Кто-нибудь знает, можно ли вернуть ассоциативный массив в результате функции Oracle, если да, то есть ли у вас примеры?

У меня есть пакет Oracle, который содержит объявление ассоциативного массива, как определено ниже:

TYPE EVENTPARAM IS TABLE OF NUMBER
    INDEX BY BINARY_INTEGER;  

Затем это используется в хранимой процедуре вне пакета следующим образом:

v_CompParams areva_interface.eventparam;

Цель состоит в том, чтобы сохранить ассоциативный массив строк в переменной v_CompParams, возвращаемой функцией Parse в другом пакете. Определение для которого следующее:

PACKAGE STRING_MANIP  
IS 

    TYPE a_array IS TABLE OF NUMBER 
        INDEX BY BINARY_INTEGER; 

    FUNCTION Parse (v_string VARCHAR2, v_delim VARCHAR2) RETURN a_array; 
    FUNCTION RowCount(colln IN a_array) RETURN NUMBER;

END;

Код, который это реализует:

v_CompParams := STRING_MANIP.PARSE(v_CompID,v_Delim);  

К сожалению, это не работает, я получаю сообщение об ошибке «PLS-00382: выражение имеет неверный тип». Я по глупости предположил, что, поскольку a_array происходит от того же исходного типа Oracle, что и переменная v_CompParams, проблем с преобразованием между ними не возникнет. Любая помощь очень ценится.

С уважением

Пол Дж.


person Paul Johnson    schedule 10.06.2010    source источник
comment
У вас есть два типа, один в areva_interface, один в string_manip, поэтому они не одного типа (даже если они имеют идентичную структуру).   -  person Jeffrey Kemp    schedule 11.06.2010


Ответы (1)


Чтобы быть того же самого типа, v_CompParams должен быть определен как:

v_CompParams STRING_MANIP.a_array;
person Tony Andrews    schedule 10.06.2010