【问题标题】:PLSQL Viewing output of sys_refcursorPLSQL 查看 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的内容也可能会有所帮助。

标签: plsql toad


【解决方案1】:

在您的 proc 调用中,不要在光标名称前放置冒号。它应该看起来像

procPerfTR('xxx-xxxx', 'xxxxxxx', 'xxxxxxx', 'xxxxxx', cur_test);

(另请注意,我在第一个参数的开头添加了一个单引号,我认为没有它是一个简单的错字)。

分享和享受。

【讨论】:

    猜你喜欢
    • 2013-09-02
    • 1970-01-01
    • 2021-11-09
    • 2021-10-23
    • 1970-01-01
    • 1970-01-01
    • 2012-11-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多