我有一个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
。
答案 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.