Oracle 过程游标作为 varchar2 变量



我想将像"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;

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

您只需要稍微不同的语法即可根据存储在 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.

请注意,您必须提前知道游标返回的列的数量和类型才能提取数据。

最新更新