作为测试的一部分,我想使用EXECUTE IMMEDIATE
运行PL / SQL块但是当我尝试使用INTO
获取结果时,无论PL /的内容如何,它总是返回相同的错误我想运行的SQL块。
DECLARE
l_output VARCHAR2(10);
BEGIN
EXECUTE IMMEDIATE 'BEGIN COMMIT; END;' INTO l_output;
END;
/
错误是
ORA-01007: variable not in select list
我知道这个错误必须与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;
/
答案 0 :(得分:8)
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;
/
如果您愿意,可以这样做:
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;