sql >> データベース >  >> RDS >> Oracle

ステートメントのトリガー内でステートメントの影響を受ける行数を取得する方法

    1つの方法は、グローバル変数を使用して行数を追跡することです。ステートメントレベルのトリガーから行数を取得する方法は他にありません。次に、3つのトリガーが必要になります...ステートメントを実行する前に変数を初期化するための1つのステートメントレベル、各行の変数に1つ追加するための1つの行レベル、必要に応じて行数を使用するための1つのステートメントレベル。まず、変数とそれを支援するためのいくつかの手順を設定します。

    create or replace package PKG_ROWCOUNT is
      NUMROWS   number;
    
      procedure INIT_ROWCOUNT;
    
      procedure ADD_ONE;
    
      function GET_ROWCOUNT
        return number;
    end PKG_ROWCOUNT;
    /
    
    create or replace package body PKG_ROWCOUNT as
      procedure INIT_ROWCOUNT is
      begin
        NUMROWS := 0;
      end;
    
      procedure ADD_ONE is
      begin
        NUMROWS := Nvl(NUMROWS, 0) + 1;
      end;
    
      function GET_ROWCOUNT
        return number is
      begin
        return NUMROWS;
      end;
    end PKG_ROWCOUNT;
    /
    

    変数を初期化する最初のトリガー:

    create or replace trigger CUSTOMER_CHANGES_TRIGGER_1
      before insert or update or delete
      on CUSTOMERS
    begin
      PKG_ROWCOUNT.INIT_ROWCOUNT;
    end;
    

    行ごとに更新する2番目:

    create or replace trigger CUSTOMER_CHANGES_TRIGGER_2
      after insert or update or delete
      on CUSTOMERS
      for each row
    begin
      PKG_ROWCOUNT.ADD_ONE;
    end;
    /
    

    合計を表示する3番目:

    create or replace trigger CUSTOMER_CHANGES_TRIGGER_3
      after insert or update or delete
      on CUSTOMERS
    begin
       Dbms_output.
       PUT_LINE(PKG_ROWCOUNT.GET_ROWCOUNT || ' rows were affected.');
    end;
    


    1. MySQLのスクリプトからデータベースを作成する方法

    2. 結果が得られるまで複数のSELECTを試す方法はありますか?

    3. Django、mod_wsgi、psycopg2が不適切に構成されています:psycopg2モジュールの読み込み中にエラーが発生しました:_psycopgという名前のモジュールがありません

    4. MariaDBのSYSDATE()とNOW()の違い