sql - EXECUTE IMMEDIATE PL/SQL block 返回类型

标签 sql oracle plsql

作为测试的一部分,我想使用 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_outputEXECUTE IMMEDIATE 返回的类型不同,但我不知道类型。我已经尝试将 l_output 更改为 CLOBBLOBNUMBER 并且没有任何变化。任何想法?

好的,这是另一个例子,结果相同。
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/

相关文章:

mysql - 加入帖子详情以喜欢查询

mysql - 更新 SQL 中的列等于其他表中的行数

sql-server - T-SQL 相当于 Oracle 的 %TYPE 运算符?

java - 如何在 Java 中执行 Oracle PLSQL block

sql - SQL 语句中不允许的本地集合类型

php - 我如何获取一个包含 sql 查询的 php 变量,并使用 $db->updatePhoneNumbers() 将其添加到现有的 sql 查询中?

sql - 带有 case when 和 group by 的 Value 列的计数

plsql - 在 SELECT 语句中使用声明的变量

sql - 如何循环PL/SQL的:=a+2;

sql - 使用查询获取 VIEW ddl