これを行うにはいくつかの方法があります。
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
。