0

挿入時に id-column を Oracle-sequence (next-)value に設定するトリガーを考えてみましょう。ここで、いくつかの追加のデバッグ アクションを使用して拡張したいと考えています。ただし、特定の接続/セッション (つまり、デバッグ用) でのみアクティブにする必要があります。

クライアント側の疑似コード:

  • Oracle データベースへの接続を開く
  • その接続に対してのみ mydebugflag=yes を設定します
  • 何かを挿入する
  • 接続を閉じる

サーバー側の疑似コード (トリガー内):

  • セット ID = someseq.next_val
  • mydebugflag=yes の場合 { do_some_extra_sanity_checks(); 診断();}
  • それ以外:終了

Oracle データベースにそのようなロジックを実装する方法は?

これにはどの Oracle 機能を使用すればよいですか?

4

1 に答える 1

3

これを行うにはいくつかの方法があります。

1 つは、パッケージを作成し、パッケージ内にパッケージ グローバル変数 (セッション スコープを持つ) を作成してから、クライアントにパッケージ変数を設定させ、トリガーにそれを読み取らせる方法です。何かのようなもの

CREATE OR REPLACE PACKAGE pkg_debug_mode
AS
  PROCEDURE set_debug_mode( p_debug_mode IN NUMBER );
  FUNCTION  get_debug_mode
    RETURN  NUMBER;

  DEBUG_MODE_ON  constant number := 1;
  DEBUG_MODE_OFF constant number := 2;
END;

CREATE OR REPLACE PACKAGE BODY pkg_debug_mode
AS
  g_debug_mode NUMBER := DEBUG_MODE_ON;
  PROCEDURE set_debug_mode( p_debug_mode IN NUMBER )
  AS
  BEGIN
    g_debug_mode := p_debug_mode;
  END;
  FUNCTION get_debug_mode
    RETURN NUMBER
  IS
  BEGIN
    RETURN g_debug_mode;
  END;
END;

クライアントはpkg_debug_mode.set_debug_modeデバッグ モードを設定するために呼び出し、トリガーはpkg_debug_mode.get_debug_modeセッションの現在のデバッグ モードを決定するために呼び出します。

create or replace context my_ctx using pkg_debug_mode;

CREATE OR REPLACE PACKAGE BODY pkg_debug_mode
AS
  PROCEDURE set_debug_mode( p_debug_mode IN NUMBER )
  AS
  BEGIN
    dbms_session.set_context( 'MY_CTX', 'DEBUG_MODE', p_debug_mode );
  END;
  FUNCTION get_debug_mode
    RETURN NUMBER
  IS
  BEGIN
    RETURN SYS_CONTEXT( 'MY_CTX', 'DEBUG_MODE' );
  END;
END;

トリガーはget_debug_mode関数を呼び出すか、呼び出しをトリガーに入れることでコンテキストを直接参照できますSYS_CONTEXT

于 2013-02-28T21:48:22.450 に答える