【发布时间】:2014-01-14 12:47:04
【问题描述】:
在 Oracle 9i 中,在命令行程序中。如何dbms_output.put_line前一个BEGIN和最后一个COMMIT之间受影响的行数(更新/删除/插入)?
另外,如何打印执行指令的数量(DML,DDL)?
【问题讨论】:
标签: oracle oracle9i oraclecommand
在 Oracle 9i 中,在命令行程序中。如何dbms_output.put_line前一个BEGIN和最后一个COMMIT之间受影响的行数(更新/删除/插入)?
另外,如何打印执行指令的数量(DML,DDL)?
【问题讨论】:
标签: oracle oracle9i oraclecommand
没有简单的方法来获取执行的语句数或受影响行的累积计数。您需要添加代码来自己跟踪。对于语句的数量,您每次执行时只需将一个变量添加到变量中即可。对于受影响的行数,您可以使用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;
/
如果您只对提交的值感兴趣,并且如果您打算在中间块执行该操作,则需要在 commit 或 rollback 之后重置计数器;虽然这通常不是必需的,也不是一个好主意。
【讨论】: