受PL/SQL中UPDATE影响的行数

Tho*_*zer 155 oracle plsql sql-update

我有一个PL/SQL函数(在Oracle 10g上运行),我在其中更新了一些行.有没有办法找出UPDATE影响了多少行?当手动执行查询时,它会告诉我有多少行受到影响,我想在PL/SQL中获取该数字.

Cli*_*ive 234

你使用sql%rowcount变量.

您需要在需要查找受影响的行数的语句之后直接调用它.

例如:

set serveroutput ON; 
DECLARE 
    i NUMBER; 
BEGIN 
    UPDATE employees 
    SET    status = 'fired' 
    WHERE  name LIKE '%Bloggs'; 
    i := SQL%rowcount; 
    --note that assignment has to precede COMMIT
    COMMIT; 
    dbms_output.Put_line(i); 
END; 
Run Code Online (Sandbox Code Playgroud)

  • 并且赋值必须在任何COMMIT之前 (4认同)

CLS*_*CLS 23

对于那些想要普通命令的结果的人来说,解决方案可能是:

begin
  DBMS_OUTPUT.PUT_LINE(TO_Char(SQL%ROWCOUNT)||' rows affected.');
end;
Run Code Online (Sandbox Code Playgroud)

基本问题是SQL%ROWCOUNT是PL/SQL变量(或函数),不能直接从SQL命令访问.通过使用noname PL/SQL块,可以实现这一点.

...如果有人有解决方案在SELECT命令中使用它,我会感兴趣.


Ali*_*i H 6

或者,SQL%ROWCOUNT 您可以在过程中使用它,而无需声明变量

  • 我认为Ali H的观点是,在你有另一个会影响行数的SQL语句之前,没有必要将它分配给变量.话虽如此,我同意它应该被分配给一个变量,以避免在有人在调用之前添加另一个SQL语句时导致错误.而且,Ali H的答案应该是对Clive答案的评论,而不是作为一个单独的答案发布 (7认同)
  • SQL%ROWCOUNT是一个函数,你不能只是"使用它" - 你需要*做*它的东西 - 无论是存储在变量中,还是将其作为输入发送到另一个过程,或者将其添加到其他过程中. (3认同)