Массив PL / SQL в refcursor для возврата

#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, чтобы предоставить более полный / точный синтаксис.