【问题标题】:Print the number of COMMITTED lines or/and commands executed打印 COMMITTED 行数或/和执行的命令数
【发布时间】:2014-01-14 12:47:04
【问题描述】:

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

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

【问题讨论】:

    标签: oracle oracle9i oraclecommand


    【解决方案1】:

    没有简单的方法来获取执行的语句数或受影响行的累积计数。您需要添加代码来自己跟踪。对于语句的数量,您每次执行时只需将一个变量添加到变量中即可。对于受影响的行数,您可以使用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 之后重置计数器;虽然这通常不是必需的,也不是一个好主意。

    【讨论】:

    • 我怀疑...没有FOO%STATEMNTCOUNT,我们必须一一计算。
    猜你喜欢
    • 1970-01-01
    • 2016-05-01
    • 2012-02-28
    • 1970-01-01
    • 1970-01-01
    • 2010-12-12
    • 1970-01-01
    • 1970-01-01
    • 2021-03-12
    相关资源
    最近更新 更多