1

Oracle 9i では、コマンド ライン プログラムで。前の行と最後のdbms_output.put_line行の間で影響を受ける行 (更新/削除/挿入) の数を確認するにはどうすればよいですか?BEGINCOMMIT

さらに、実行された命令 (DML、DDL) の数を出力する方法は?

4

1 に答える 1

5

実行されたステートメントの数、または影響を受けた行の累積数を取得する簡単な方法はありません。それを追跡するコードを自分で追加する必要があります。ステートメントの数については、実行するたびに変数に1つ追加するだけです。影響を受ける行数については、SQL%ROWCOUNT 暗黙カーソル属性を使用できます。

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ます。ただし、それは通常は必要ないか、良い考えではありません。

于 2014-01-14T14:43:47.957 に答える