作为测试的一部分,我想使用PL/SQL块运行,EXECUTE IMMEDIATE但是当我尝试使用INTO它获取结果时,无论我想运行的PL/SQL块的内容如何,它总是返回相同的错误.
DECLARE
l_output VARCHAR2(10);
BEGIN
EXECUTE IMMEDIATE 'BEGIN COMMIT; END;' INTO l_output;
END;
/
Run Code Online (Sandbox Code Playgroud)
错误是
ORA-01007: variable not in select list
Run Code Online (Sandbox Code Playgroud)
我知道这个错误必须与l_output返回类型不同EXECUTE IMMEDIATE,但我不知道类型.我已经试图改变l_output到CLOB,BLOB,NUMBER并没有什么变化.任何的想法?
好的,这是另一个例子,同样的结果.
DECLARE
l_output VARCHAR2(10);
BEGIN
EXECUTE IMMEDIATE 'BEGIN DBMS_OUTPUT.PUT_LINE(''TEST''); END;' INTO l_output;
END;
/
Run Code Online (Sandbox Code Playgroud)
Oracle抱怨是因为您的PL/SQL没有返回任何内容来存储l_output.你期待它的价值l_output是什么?
一个人会使用EXECUTE IMMEDIATE... INTO这样的东西从PL/SQL块返回一个值.
DECLARE
l_output VARCHAR2(10);
BEGIN
EXECUTE IMMEDIATE 'SELECT ''ABC'' FROM DUAL' INTO l_output;
dbms_output.put_line('l_output = ' || l_output);
END;
/
Run Code Online (Sandbox Code Playgroud)
如果你愿意,你可以这样做:
DECLARE
l_output VARCHAR2(10);
BEGIN
EXECUTE IMMEDIATE 'BEGIN :1 := 5; END;' USING IN OUT l_output;
dbms_output.put_line('l_output = ' || l_output);
END;
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5137 次 |
| 最近记录: |