database.sarang.net
UserID
Passwd
Database
DBMS
MySQL
PostgreSQL
Firebird
ㆍOracle
Informix
Sybase
MS-SQL
DB2
Cache
CUBRID
LDAP
ALTIBASE
Tibero
DB 문서들
스터디
Community
공지사항
자유게시판
구인|구직
DSN 갤러리
도움주신분들
Admin
운영게시판
최근게시물
Oracle Q&A 40655 게시물 읽기
No. 40655
statement trigger 에서 변경된 데이터 확인 방법
작성자
뉴비
작성일
2014-12-20 14:40
조회수
6,517

insert, update, delete trigger 를 걸려고 합니다

 

여건상 for each row 로 걸수가 없어 statement 로 걸어야 하는 상황인데

트리거에서 하는 작업이 변경된 데이터들을 별도의 테이블로 옮기는 작업입니다

 

물론 for each row 로 변경될때마다 1건씩 옮기면 되겠지만

옮겨지는 대상 테이블에 job_id 를 넣어주어야 하는데 이것이 timestamp 값입니다

그러다 보니 변경 데이터가 2개 이상 넘어가면 같은 job_id 를 갖어야 하는 것들이

서로 다른 job_id를 갖게 되기 때문에 statement 로 걸려고 합니다

 

이때 트리거가 걸려있는 테이블에 변경된 데이터가 무엇인지 확인 할 수 있는 방법이 있을까요?

 

어떻게 처리하는 것이 좋을지 모르겠네요

 

답변 부탁드립니다

이 글에 대한 댓글이 총 3건 있습니다.

○ 원본 테이블에 Job_id 컬럼을 두는 방법
  1. Job_id 컬럼의 Default 값을 systimestamp 로 설정
  2. 행 트리거에서 :NEW.job_id 사용하여 작업


○ 패키지 변수를 사용하는 방법
  1. 패키지 생성
    - 트리거에서 사용될 job_id 변수 선언
  2. Before Statement Trigger
    - 패키지 변수에 systimestamp 지정
  3. For Each Row Trigger
    - 패키지 변수를 읽어와 작업 수행

마농(manon94)님이 2014-12-22 09:40에 작성한 댓글입니다.

권한만 있다면 패키지생성을  DBMS_APPLICATION_INFO로 대체해도 가능할겁니다

CREATE OR REPLACE TRIGGER TR_STATEMENT_EMP
BEFORE INSERT OR UPDATE OR DELETE ON EMP
BEGIN
 DBMS_APPLICATION_INFO.SET_MODULE(user,SYSTIMESTAMP);
END;
/

CREATE OR REPLACE TRIGGER TR_ROW_EMP
BEFORE INSERT OR UPDATE OR DELETE ON EMP
FOR EACH ROW
DECLARE p_name varchar2(100);  p_job varchar2(100);
BEGIN
 DBMS_APPLICATION_INFO.READ_MODULE (p_name, p_job);
  IF UPDATING ('COMM') THEN
  dbms_output.put_line(p_job || ' comm update : '|| to_char(:new.comm) ); 
 END IF;
END;
/

SQL>set serveroutput on
SQL>update emp set comm = 999 where comm is null;

 

최성준(junkk)님이 2014-12-22 12:00에 작성한 댓글입니다.
이 댓글은 2014-12-22 12:17에 마지막으로 수정되었습니다.

위 두분 댓글 감사합니다

 

결론은 statement before trigger 에서 ID 를 생성하고

for each row after trigger 에서 사용 하라는 얘기 이시군요

 

한번 적용해 보겠습니다

뉴비님이 2014-12-22 14:25에 작성한 댓글입니다. Edit
[Top]
No.
제목
작성자
작성일
조회
40658세로결과를 가로 고정column으로 출력 방법 부탁드립니다. [2]
jinkuidong
2014-12-22
7119
40657해당월을 입력받아 주별데이터 합계 구하는 쿼리 문의 [17]
마스
2014-12-22
7887
40656import 에러발생 도와주세요.. [1]
엠제이준
2014-12-22
8826
40655statement trigger 에서 변경된 데이터 확인 방법 [3]
뉴비
2014-12-20
6517
40654Oracle 9i DB 복구방법 [1]
박태학
2014-12-19
6489
40653SYSDATE FUNCTION 과 SQL 결과값이 다른데 확인 부탁드립니다. [3]
박재덕
2014-12-18
6431
40652현지 시간으로 저장하기 [1]
한동훈
2014-12-16
6593
Valid XHTML 1.0!
All about the DATABASE... Copyleft 1999-2024 DSN, All rights reserved.
작업시간: 0.020초, 이곳 서비스는
	PostgreSQL v16.2로 자료를 관리합니다