PL / SQL SELECT语句仅包含PLS-00428中的变量结果

时间:2018-01-25 16:51:31

标签: oracle plsql

我有一个PL / SQL批处理,执行UPDATE后跟INSERT。从这个批处理,我想返回更新的行数和插入的行数。

我可以通过在每个相应的SQL语句之后将sql%rowcount存储在ROWS_UPDATED和ROWS_INSERTED变量中来检索这些数字。当我尝试使用SELECT语句从批处理中返回计数时,会出现问题。

这是一个重现我遇到的错误的最小样本:

DECLARE 
    ROWS_UPDATED NUMBER := 0;
    ROWS_INSERTED NUMBER := 0;
    ROWS_DELETED NUMBER := 0;
BEGIN

    SELECT ROWS_INSERTED, ROWS_UPDATED, ROWS_DELETED FROM DUAL;
END;  

Oracle报告以下错误:

Error report -
ORA-06550: line 7, column 5:
PLS-00428: an INTO clause is expected in this SELECT statement
06550. 00000 -  "line %s, column %s:\n%s"
*Cause:    Usually a PL/SQL compilation error.
*Action:

实现目标的正确方法是什么?我疯狂地搜索了互联网,似乎无法找到办法。我需要从批处理中返回这些值,以便ETL包可以使用这些值进行报告。

重要提示:我需要这个才能批量使用。我无法在目标数据库上创建函数或子程序。出于这个原因,我不相信使用return关键字是一种选择。

不重复:建议的重复文章涉及使用SELECT INTO并使用dbms_output返回值。我需要直接返回SELECT的结果,以便SSIS ETL包直接使用。批处理的返回值必须是多列结果集。我遇到的错误可能表明我使用错误的技术来实现我的目标;我可以接受。我需要知道如何返回仅包含批量变量值的SELECT

1 个答案:

答案 0 :(得分:1)

您需要INTO在PLSQL块中进行选择查询。

SQL> begin
  2      select 1 from dual;
  3  end;
  4  /
    select 1 from dual;
    *
ERROR at line 2:
ORA-06550: line 2, column 5:
PLS-00428: an INTO clause is expected in this SELECT statement


SQL> declare
  2      vVar number;
  3  begin
  4      select 1 into vVar from dual;
  5  end;
  6  /

PL/SQL procedure successfully completed.

如果需要打印查询结果,可以使用DBMS_OUTPUT:

SQL> set serveroutput on
SQL> declare
  2      vVar number;
  3  begin
  4      select 1 into vVar from dual;
  5      --
  6      dbms_output.put_line('Result: ' || vVar);
  7  end;
  8  /
Result: 1

PL/SQL procedure successfully completed.