我正在尝试在 oracle 中创建一个返回多行的存储函数。
我的问题与这个问题非常相似,只是我想获取一个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);
Oracle 抛出以下错误
ORA-00902: invalid datatype
00902. 00000 - "invalid datatype"
*Cause:
*Action:
Error at Line: 1 Column: 20
我认为 Oracle 希望我在架构级别创建返回类型,但是当我尝试这样做时
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
有人可以指出我正确的方向吗?我在这里想念什么?
谢谢阅读!