#oracle #plsql #oracle11g #oracle10g
#Oracle #plsql #oracle11g #oracle10g
Вопрос:
Я новичок в PL / SQL. Мне нужно преобразовать массив в refcursor, чтобы вернуть набор записей. вот как выглядит SP:
PROCEDURE EXAMPLE(p_recordset OUT SYS_REFCURSOR) AS
TYPE COUNTRY_ARR IS TABLE OF VARCHAR2(60) INDEX BY BINARY_INTEGER;
V_COUNTRY_ARR COUNTRY_ARR;
BEGIN
V_COUNTRY_ARR(1) := 'US';
V_COUNTRY_ARR(2) := 'AUS';
V_COUNTRY_ARR(3) := 'NA';
OPEN p_recordset FOR SELECT * FROM TABLE(CAST(V_COUNTRY_ARR AS COUNTRY_ARR));
END EXAMPLE;
Выдает мне сообщение об ошибке «Ошибка (86,68): PL / SQL: ORA-00902: недопустимый
тип данных»
Заранее благодарю вас!
Ответ №1:
Вы пытаетесь привести к типу PL / SQL. Это невозможно сделать до Oracle 12c (и даже тогда, я полагаю, тип должен быть определен в спецификации пакета).
В Oracle 11g вам необходимо создать COUNTRY_ARR
как тип SQL с CREATE TYPE
помощью команды. Тогда ваше приведение будет работать.
Т.е. (вне вашего пакета PL / SQL)
CREATE TYPE country_arr AS TABLE OF VARCHAR2(60);
Извините, у меня нет базы данных Oracle, чтобы предоставить более полный / точный синтаксис.