PLSQL 查看 sys_refcursor 的输出
Posted
技术标签:
【中文标题】PLSQL 查看 sys_refcursor 的输出【英文标题】:PLSQL Viewing output of sys_refcursor 【发布时间】:2013-05-08 15:36:47 【问题描述】:我正在为 Oracle 11 使用 TOAD,并且对 SQL 很陌生。我已经编写了一个 proc,现在正在尝试测试和查看它的输出。我写了以下代码块:
DECLARE
cur_test SYS_REFCURSOR;
type t_row is record(psh_code varchar2(20) , pattr_end_date varchar2(20), pperf_gross varchar2(20));
r_test t_row;
BEGIN
procPerfTR(xxx-xxxx', 'xxxxxxx', 'xxxxxxx', 'xxxxxx', :cur_test);
LOOP
FETCH cur_test INTO r_test;
EXIT WHEN cur_test%NOTFOUND;
END LOOP;
CLOSE cur_test;
END;
/
但是,我在 LOOP 行收到以下错误
ORA-01001: 无效游标
错误出现在第 10 行,即带有“LOOP”的行
我的过程看起来像这样
CREATE OR REPLACE PROCEDURE procPerfTR
(
paramPortfCode VARCHAR2,
paramEndDate VARCHAR2,
paramShare VARCHAR2,
paramFreq VARCHAR2,
O_cursorPerf out SYS_REFCURSOR
)
IS
I_cursorPerf SYS_REFCURSOR;
BEGIN
OPEN I_cursorPerf FOR
SELECT PS.PSH_CODE, PP.PATTR_END_DATE, PP.PPERF_GROSS
FROM
PORTFOLIO_PERFORMANCES PP
INNER JOIN PORTF_SHARE PS ON PS.PORTF_SHARE_ID = PP.PORTF_SHARE_ID
INNER JOIN PORTFOLIO P ON P.PORTF_ID = PS.PORTF_ID
INNER JOIN T_FREQUENCY TF ON TF.FREQUENCY_ID = PP.FREQUENCY_ID
WHERE
P.PORTF_CODE = paramPortfCode
AND PP.PATTR_CALCUL_DATE = PP.PATTR_END_DATE
AND PP.PATTR_END_DATE = paramEndDate
AND TF.EXT_CODE = paramFreq
AND PS.PSH_CODE LIKE
(CASE
WHEN paramShare = 'xxxx' THEN '%xxx'
WHEN paramShare = 'xxxx' THEN '%xxx'
END);
O_cursorPerf:=I_cursorPerf;
END;
/
【问题讨论】:
什么是procPerfTR
?
这是我调用的过程。
这个错误会给你一个行号吗?如果不麻烦的话,提供procPerfTR
的内容也可能会有所帮助。
【参考方案1】:
在您的 proc 调用中,不要在光标名称前放置冒号。它应该看起来像
procPerfTR('xxx-xxxx', 'xxxxxxx', 'xxxxxxx', 'xxxxxx', cur_test);
(另请注意,我在第一个参数的开头添加了一个单引号,我认为没有它是一个简单的错字)。
分享和享受。
【讨论】:
以上是关于PLSQL 查看 sys_refcursor 的输出的主要内容,如果未能解决你的问题,请参考以下文章
使用 sys_refcursor 执行 pl sql 存储过程时出错
如何使用 Toad 工具显示 sys_refcursor 输出 pl sql