【问题标题】:Oracle Procedure cursor as a varchar2 variableOracle 过程游标作为 varchar2 变量
【发布时间】:2017-01-24 14:12:01
【问题描述】:

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

这是我的代码,我的 proc 的样子

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;

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

【问题讨论】:

    标签: oracle stored-procedures cursor


    【解决方案1】:

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

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

    【讨论】:

    • 帮了大忙。非常感谢。
    猜你喜欢
    • 2014-10-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-02-02
    • 1970-01-01
    • 2018-01-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多