複数の行を返すストアド関数をオラクルで作成しようとしています。
私の質問は、クエリを取得したいことを除いて、これと非常によく似ていますselect *
一言で言えば、このクエリの結果を返す関数を作成したい
select * from t_email_queue
私が試したのはこれです:
create or replace
PACKAGE email_queue AS
type t_email_queue_type is table of T_EMAIL_QUEUE%ROWTYPE;
FUNCTION lock_and_get return t_email_queue_type;
END email_queue;
create or replace
PACKAGE BODY email_queue AS
FUNCTION lock_and_get RETURN t_email_queue_type AS
queue_obj t_email_queue_type;
cursor c (lockid in varchar2) is select * from t_email_queue where lockedby = lockid;
lockid varchar2(100) := 'alf';
BEGIN
OPEN c(lockid);
FETCH c bulk collect INTO queue_obj;
return queue_obj;
END lock_and_get;
END email_queue;
パッケージは問題なくコンパイルされますが、このクエリで呼び出そうとすると
select * from table(email_queue.lock_and_get);
オラクルは次のエラーをスローします
ORA-00902: invalid datatype
00902. 00000 - "invalid datatype"
*Cause:
*Action:
Error at Line: 1 Column: 20
オラクルはスキーマレベルで戻り値の型を作成することを望んでいると思いますが、私がやろうとすると
create type t_email_queue_type is table of T_EMAIL_QUEUE%ROWTYPE;
オラクルは不平を言う
Type IMAIL.T_EMAIL_QUEUE_TYPE@imail dev
Error(1): PL/SQL: Compilation unit analysis terminated
Error(2,37): PLS-00329: schema-level type has illegal reference to IMAIL.T_EMAIL_QUEUE
誰かが私を正しい方向に向けることができますか? ここで何が欠けていますか?
読んでくれてありがとう!