Oracle Procedure 游标作为 varchar2 变量
Oracle Procedure cursor as a varchar2 variable
我想将 "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:
中的 select 打开游标
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.
注意,你必须事先知道游标返回的列的数量和类型才能获取数据。
我想将 "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:
中的 select 打开游标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.
注意,你必须事先知道游标返回的列的数量和类型才能获取数据。