반응형
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
반응형
'programing' 카테고리의 다른 글
새 줄을 유지하면서 도커 파일에 여러 줄로 명령을 작성하는 방법은 무엇입니까? (0) | 2023.08.19 |
---|---|
SQL에서 특정 열과 날짜별로 고유한 행을 선택하는 방법은 무엇입니까? (0) | 2023.08.19 |
Capistrano를 사용하여 다른 깃 분기에서 배치 (0) | 2023.08.19 |
처리 방법 :java.util.current.시간 초과예외: Android.os.BinderProxy.finalize()가 10초 오류 후 시간 초과되었습니까? (0) | 2023.08.19 |
SQL 네트워크 인터페이스, 오류: 26 - 지정된 서버/인스턴스를 찾는 중 오류 발생 (0) | 2023.08.19 |