Oracle Procedure游标作为varchar2变量

时间:2017-01-24 14:12:01

标签: oracle stored-procedures cursor

我想将类似"select 'a' as alphabet, 1 as number from dual"的字符串传递给过程并使用相同的字符串来分配给游标。

这是我的代码看起来像

的代码
CREATE OR REPLACE PROCEDURE ME( sqlstmt in varchar2 )
AS  
  C1 CURSOR IS sqlstmt;

BEGIN  
  FOR REC IN C1 
        LOOP
            DBMS_OUTPUT.PUT_LINE(REC.alphabet);
        END LOOP;
END;

尝试执行立即和其他东西,但没有任何帮助。

1 个答案:

答案 0 :(得分:0)

您只需要稍微不同的语法即可根据存储在varchar2中的选择打开游标:

CREATE OR REPLACE PROCEDURE ME(sqlstmt IN VARCHAR2) AS
    C1                                      SYS_REFCURSOR;
    vAlphabet   varchar2(100);
    vNumber     number;
BEGIN
    OPEN C1 FOR sqlstmt;

    LOOP
        FETCH C1 INTO vAlphabet, vNumber;

        EXIT WHEN C1%NOTFOUND;
        DBMS_OUTPUT.PUT_LINE(vAlphabet);
    END LOOP;
END;

过程调用,注意避免在语句中使用诸如'number'之类的保留字:

SQL> exec ME('select ''a'' as alphabetValue, 1 as numberValue from dual');
a

PL/SQL procedure successfully completed.

请注意,您必须事先知道游标返回的列数和类型以获取数据。