programing

Oracle 트리거에 임의 매개 변수를 보내는 방법은 무엇입니까?

muds 2023. 8. 19. 10:55
반응형

Oracle 트리거에 임의 매개 변수를 보내는 방법은 무엇입니까?

목적은 웹 응용 프로그램에서 현재 사용자 ID와 같은 추가 정보를 트리거로 보내는 것입니다.연결 풀이 사용되고 모든 연결에 동일한 사용자 ID가 사용되므로 트리거할 원래 웹 사용자 ID를 전달하려면 어떻게 해야 합니까?애플리케이션 코드를 건드리지 않고 구현해야 합니다.이것은 자바 기반 애플리케이션입니다.

존.

client_identifier 세션 변수를 사용하여 응용 프로그램 사용자를 트리거로 전달할 수 있습니다.

다음과 같이 데이터베이스에 연결한 후 설정합니다.

  CALL dbms_session.set_identifier('<<username>>');

트리거 내에서 검색합니다.

  SELECT sys_context('USERENV','CLIENT_IDENTIFIER') INTO username FROM DUAL;

자세한 내용은 오라클 문서에서 확인할 수 있습니다.

Oracle 컨텍스트를 사용할 수 있습니다.

SQL> CREATE OR REPLACE PACKAGE test_pkg AS
  2     PROCEDURE set_context(p_attribute VARCHAR2, p_value VARCHAR2);
  3  END test_pkg;
  4  /

Package created
SQL> CREATE OR REPLACE PACKAGE BODY test_pkg AS
  2     PROCEDURE set_context(p_attribute VARCHAR2, p_value VARCHAR2) IS
  3     BEGIN
  4        dbms_session.set_context('test_ctx', p_attribute, p_value);
  5     END;
  6  END test_pkg;
  7  /

Package body created

SQL> create context test_ctx using test_pkg;

Context created

SQL> exec test_pkg.set_context ('user_id', 'Vincent');

PL/SQL procedure successfully completed

SQL> select sys_context('test_ctx', 'user_id') from dual;

SYS_CONTEXT('TEST_CTX','USER_I
--------------------------------------------------------------------------------
Vincent

패키지를 사용하여 웹 사용자를 추적할 수 있습니다.

create package web_user_pkg is

    procedure set_username (p_username varchar2);

    function username return varchar2;

end;

create package body web_user_pkg is

    g_username varchar2(30);

    procedure set_username (p_username varchar2)
    is
    begin
        g_username := p_username;
    end;

    function username return varchar2 is
    begin
        return g_username;
    end;

end;

DML 또는 기타 패키지 호출을 수행하기 전에 웹 페이지에서 현재 사용자의 ID로 web_user_pkg.set_username을 호출합니다.

트리거에서 web_user_pkg.username을 사용하여 웹 사용자 이름을 가져옵니다.

언급URL : https://stackoverflow.com/questions/1880729/how-to-send-arbitrary-parameters-to-oracle-trigger

반응형