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 39452 게시물 읽기
No. 39452
트리거 질문 좀 드리겠습니다.
작성자
노진광(kite20)
작성일
2012-05-15 11:48
조회수
4,186

상황 : 트리거로 특정 테이블에 업데이트시에 

          사용자가 입력한 특정 값을 프로시져로 가공한 후 업데이트를 해야 하는  상황 

이슈 :  where 절에 입력하는 조건절을 미리 알수 없을 경우 조건절을 사용자가 입력한 조건절을 입력 받는 방법이 없을까요?

 

쿼리는 아래와 같습니다. 

조언 부탁 드립니다. 

 

 

DROP TRIGGER TEST_TABLE_TR;

CREATE OR REPLACE TRIGGER TEST_TABLE_TR

   INSTEAD OF INSERT OR UPDATE

   ON TEST_TABLE

   FOR EACH ROW

BEGIN

   IF :NEW.a_data IS NOT NULL

   THEN

      IF INSERTING

      THEN

         INSERT INTO TEST_TABLE (IDX, a_data, REG_DATE)

              VALUES (

                        :NEW.IDX,

                        CASE

                           WHEN :NEW.a_data IS NULL THEN :NEW.a_data

                           ELSE aaa (:NEW.a_data, NULL, 0)

                        END,

                        :NEW.REG_DATE);

      END IF;

 

      IF UPDATING

      THEN

         UPDATE TEST_TABLE

            SET IDX = :NEW.IDX,

                JUMIN =

                   CASE

                      WHEN :NEW.a_data IS NULL THEN :NEW.a_data

                      ELSE aaa (:NEW.a_data, NULL, 0)

                   END,

                REG_DATE = :NEW.REG_DATE

          WHERE IDX = :NEW.IDX;  

      END IF;

   END IF;

 

 

 

 

 

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

어차피 트리거라는게 조건에 맞는 행에 대해서만 동작하는것 아닌지요?

굳이 입력된 조건값을 알 필요가 있나요?

빨간색 부분은 굳이 고치자면 :OLD. 으로 고치면 될것이구요.

복잡하게 불필요한 코드들이 많지만 결국 트리거의 내용은 상당히 단순한데요.

굳이 Instead of 트리거로 별도 DML 로 처리할 필요가 없어 보이네요.

Instead of 대신 Before 로 바꾸시고,

단순하게 :NEW.컬럼에 새 값을 대입하시면 될것으로 보입니다.

마농(manon94)님이 2012-05-16 08:52에 작성한 댓글입니다.

CREATE OR REPLACE TRIGGER test_table_tr
BEFORE INSERT OR UPDATE
ON test_table
FOR EACH ROW
BEGIN
    IF :NEW.a_data IS NOT NULL THEN
        :NEW.a_data := aaa (:NEW.a_data, NULL, 0);
    END IF;
END;
/

마농(manon94)님이 2012-05-16 08:56에 작성한 댓글입니다.

정말 감사합니다. 

쿼리까지 만들어주시고~

도움 많이 받고 갑니다. 

 

 

 

노진광(kite20)님이 2012-05-16 11:01에 작성한 댓글입니다.
[Top]
No.
제목
작성자
작성일
조회
39455고수님들께 조언을 구하고자 합니다. [1]
박정우
2012-05-16
3772
39454고수님들께 조언을 구하고자 합니다.. [4]
박정우
2012-05-16
3979
39453sum [1]
마루아라
2012-05-15
3816
39452트리거 질문 좀 드리겠습니다. [3]
노진광
2012-05-15
4186
39451SELECT 절에 ' 표현 질문 [1]
구름이
2012-05-14
3398
39449아주 드물게 나는 dB insert가 안되는데, 매시 정각에만 1~2건 나네요~ [4]
Enos
2012-05-11
4038
39448오류 수정좀 부탁 드립니다. [1]
학생
2012-05-11
3979
Valid XHTML 1.0!
All about the DATABASE... Copyleft 1999-2024 DSN, All rights reserved.
작업시간: 0.018초, 이곳 서비스는
	PostgreSQL v16.2로 자료를 관리합니다