【发布时间】:2014-10-09 19:52:46
【问题描述】:
很抱歉问题的标题过于宽泛,但我没有找到进一步简化它的方法。
我正在为客户创建一个包,这个包有一个返回SYS_REFCURSOR 的过程。提供它的查询是一个包含大约 20 个字段的多表选择。在第二个过程中,我需要调用它,并循环遍历结果以提供其他位置。
我在使用循环的into 部分时遇到问题。我不能使用table%ROWTYPE。我试图在程序上声明一个OBJECT,但这是不允许的。我需要FETCH XXX INTO LIST_OF_INDVIDUAL_VARIABLES吗?
DECLARE
dt_field TABLE1.dt_field%TYPE;
p_resultset SYS_REFCURSOR;
p_individual OBJECT (
FIELD0 DATE,
FIELD1 TABLE.FIELD1%TYPE,
FIELD2 TABLE.FIELD2%TYPE,
FIELD3 TABLE.FIELD3%TYPE,
FIELD4 TABLE.FIELD4%TYPE
);
BEGIN
PACKAGE.PROCEDURE1(dt_field);
dbms_output.put_line(dt_field);
PACKAGE.PROCEDURE2(dt_field, p_resultset);
LOOP
-- this do not work
FETCH p_resultset INTO p_individual;
EXIT WHEN p_resultset%NOTFOUND;
-- DO STUFF ON EACH RETURNED ROW
END LOOP;
CLOSE p_resultset;
END;
【问题讨论】:
-
“我试图在过程中声明一个 OBJECT 但不允许”由于您的企业政策?由于缺乏所需的权限?或者它只是产生某种错误?
-
看看 Alex Poole 的这个答案也许:stackoverflow.com/a/11233929/2363712
-
您需要在 PL/SQL 中声明一个记录类型,而不是一个对象,然后是该记录类型的一个实例。显示你得到的错误会很有帮助。我不确定您是否可以将引用游标提取到记录类型中,即兴发挥。
标签: oracle stored-procedures plsql oracle9i