打印执行的COMMITTED行数和/或命令数

时间:2014-01-14 12:47:05

标签: oracle oracle9i oraclecommand

在Oracle 9i中,在命令行程序中。如何dbms_output.put_line上一个BEGIN和上一个COMMIT之间受影响的行数(更新/删除/插入)?

另外,如何打印已执行指令的数量(DML,DDL)?

1 个答案:

答案 0 :(得分:5)

没有简单的方法来获取执行的语句数或受影响的行的累积计数。您需要添加代码以自行跟踪。对于语句数,您可以在每次执行时向变量添加一个。对于受影响的行数,您可以使用SQL%ROWCOUNT implicit cursor attribute

declare
  statement_count pls_integer := 0;
  total_row_count pls_integer := 0;
begin
  insert into my_table (id) values (1);
  statement_count := statement_count + 1;
  total_row_count := total_row_count + SQL%ROW_COUNT;
  dbms_output.put_line('Rows affected by statement ' || statement_count
    || ': ' || SQL%ROWCOUNT);

  update my_table set id = id + 1;
  statement_count := statement_count + 1;
  total_row_count := total_row_count + SQL%ROW_COUNT;
  dbms_output.put_line('Rows affected by statement ' || statement_count
    || ': ' || SQL%ROWCOUNT);

  delete from my_table where id = 2;
  statement_count := statement_count + 1;
  total_row_count := total_row_count + SQL%ROW_COUNT;
  dbms_output.put_line('Rows affected by statement ' || statement_count
    || ': ' || SQL%ROWCOUNT);

  dbms_output.put_line('Number of statements: ' || statement_count);
  dbms_output.put_line('Total rows affected:  ' || total_row_count);
end;
/

如果您只对提交的值感兴趣,并且如果您将要执行中间阻止,则需要在commitrollback之后重置计数器。虽然这通常不是必要的,也不是一个好主意。