ORA-00932: несогласованные типы данных: ожидалось - получено -

Я использую Oracle (10g.2) как программист PHP почти 3 года, но когда я дал задание, я впервые попытался использовать ref курсоры и типы коллекций . И я Я искал в Интернете, когда столкнулся с проблемами, и эта ошибка ora-00932 действительно поразила меня. Мне нужна помощь старого человека.

Вот то, с чем я боролся, Я хочу выбрать строки из таблицы и поместить их в указатель ref, а затем, используя тип записи, собрать их в ассоциативный массив. И снова из этого ассоциативного массива сделайте указатель ref. Не спрашивайте меня, почему, я пишу такой сложный код, потому что он мне нужен для более сложных заданий. Я могу вас запутать, поэтому позвольте мне показать вам свои коды.

У меня есть 2 типа, определенные на вкладке типов в Toad. Один из них - тип объекта:

CREATE OR REPLACE
TYPE R_TYPE AS OBJECT(sqn number,firstname VARCHAR2(30), lastname VARCHAR2(30));

Другой тип коллекции, который использует тип объекта, созданный выше:

CREATE OR REPLACE
TYPE tr_type AS TABLE OF r_type;

Затем я создаю пакет:

CREATE OR REPLACE PACKAGE MYPACK_PKG IS
TYPE MY_REF_CURSOR IS REF CURSOR;
PROCEDURE MY_PROC(r_cursor OUT MY_REF_CURSOR);
END MYPACK_PKG;

Тело пакета:

CREATE OR REPLACE PACKAGE BODY MYPACK_PKG AS
 PROCEDURE MY_PROC(r_cursor OUT MY_REF_CURSOR) AS
  rcur MYPACK_PKG.MY_REF_CURSOR;
  sql_stmt VARCHAR2(1000);
  l_rarray   tr_type := tr_type();
                l_rec r_type;

 BEGIN
     sql_stmt :=  'SELECT 1,e.first_name,e.last_name  FROM hr.employees e ';
     OPEN rcur FOR sql_stmt;
     LOOP
       fetch rcur into l_rec;
                  exit when rcur%notfound;
     l_rarray := tr_type( l_rec );
     END LOOP;
   CLOSE rcur;
    --OPEN r_cursor FOR SELECT * FROM TABLE(cast(l_rarray as tr_type) );


END MY_PROC;
END MYPACK_PKG;

Я закомментировал последнюю строку, где Открываю ref курсор. Потому что это вызывает еще одну ошибку, когда я запускаю процедуру в редакторе SQL Toad, и это второй вопрос, который я задам. И, наконец, я запускаю код в Toad:

variable r refcursor
declare
r_out MYPACK_PKG.MY_REF_CURSOR;
begin
MYPACK_PKG.MY_PROC(r_out);
:r := r_out;
end;
print :r

Там я получаю ошибку ora-00932.

8
задан tshepang 8 June 2014 в 20:03
поделиться