Я использую Oracle (10g.2) в качестве программиста PHP почти 3 года, но когда я дал задание, я впервые попытался использовать ref-курсоры и типы коллекций. И я
Я искал в Интернете, когда столкнулся с проблемами, и эта ошибка ora-00932 действительно поразила меня. Мне нужна помощь от старой руки.
Вот то, с чем я столкнулся,
Я хочу выбрать строки из таблицы и поместить их в указатель ссылки, а затем, используя тип записи, собрать их в ассоциативный массив. И снова из этого ассоциативного массива создайте курсор ref. Не спрашивайте меня, почему, я пишу такой сложный код, потому что он мне нужен для более сложного назначения. Возможно, я вас смущаю, поэтому позвольте показать вам мои коды.
У меня есть 2 типа, определенных на вкладке типов в жабе. Одним из них является тип объекта:
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;
Я закомментировал последнюю строку, в которой я открываю реф курсор. Потому что это вызывает другую ошибку, когда я запускаю процедуру в редакторе SQL 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.