作为测试的一部分,我想使用 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;
/
最佳答案
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;
关于sql - EXECUTE IMMEDIATE PL/SQL block 返回类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38133093/