오라클 트리거 사용시 특정 컬럼에 대해서 업데이트가 일어날경우 처리하도록 하려면.. 0 6 5,057

by 프리어 [2011.11.18 10:49:30]


안녕하세요.. 다름이 아니고 개발중에 트리거를 사용할 일이 생겼는데 트리거를 사용한적이 없네요..

문제를 말씀드리면...

A라는 테이블에 대해서 트리거를 만들고 업데이트가 일어난후에 A테이블 특정컬럼에 값을 넣어주고싶은데 그렇게 되면 재귀적으로 실행되 버릴까요?

혹시 그렇다고 하면 트리거에서 특정컬럼에서만 update처리가 일어날경우 처리할수 있도록 할수 있을까요?

동일 테이블에서 특정 컬럼에 대해서 업데이트시 해당 테이블의 다른 테이블에 재귀적 처리가 일어나지 않도록 값이 저장 되게끔 하려면 어떻게 해야할까요?
by 이재현 [2011.11.18 10:59:49]
동일 테이블에서 특정 컬럼에 대해서 업데이트시 해당 테이블의 다른 테이블에 재귀적 처리가 일어나지 않도록 값이 저장 되게끔 하려면 어떻게 해야할까요?

의미가..

A라는 테이블에 특정 컬럼에 업데이타가 일어나면 A라는 테이블에 인서트를 한다는건가요??

아님 A라는 테이블에 다른 컬럼에 업데이트를 한다는 말인가요??

어님 B라는 다른 테이블에 인서트나 업데이트를 한다는건가요??

by 프리어 [2011.11.18 11:06:00]
설명이 이상해서 죄송..ㅜㅜ....
그대로 말씀 드리면 A라는 테이블의 a,b,c,d라는 컬럼이 있다고 하면 b,c,d컬럼중에서 업데이트가 일어나면 a컬럼에 b+c+d와 같이 합계를 구해서 넣어주고 싶거든요.. 참고로 동일 row의 다른 컬럼에 합계를 업데이트 하는것입니다.
이런 상황입니다..

by 이재현 [2011.11.18 12:21:18]
그럼 B C D를 업데이트하는 쿼리문에다가 A 업데이트하는 부분만 넣으주면 쉬울듯

합니다.

UPDATE TAB_A
SET A = 13 + C + D
, B = 13
WHERE ID = :ID

UPDATE TAB_A
SET A = B + 13 + D
, B = 13
WHERE ID = :ID

UPDATE TAB_A
SET A = B + C+ 13
, B = 13
WHERE ID = :ID

by 봉 [2011.11.18 12:55:09]
UPDATE 문에서 칼럼별로 따로 업데이트를 처리 하지 않을텐데요

UPDATE 테이블
SET B = ?
, C = ?
, D = ?
, A = B+C+D
WHERE 조건

by 마농 [2011.11.18 15:59:06]
1. 우선 a 컬럼과 같은 2차 가공이 가능한 항목은 별도 생성하지 않는게 좋습니다.
- 성능 문제로 미리 만들어 사용하기도 합니다.

2. 트리거에서 자기 자신을 업데이트 한다고 생각하시는것은 잘못입니다.
before 트리거에서 다음 구문 한줄만 추가하시면 깔끔하게 해결됩니다.
:new.a = :new.b + :new.c + :new.d;

by 프리어 [2011.11.18 22:35:24]
정말 좋은 답변 감사합니다. 정말 많이 도움 되었습니다.. ^^
댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입