몽두
20
2019-07-18 10:41:12
7
265

ORACLE trigger관련해서 질문이 있습니다!


DB에 값이 insert되면 trigger을 걸어서 insert된 행의 값을 업데이트 해주고 싶은데요

TEST_DB 라는 테이블에 TEST라는 컬럼에 '123'을 넣어주면 '12311'가 들어 가도록

트리거를 작성하려고 하는데

CREATE OR REPLACE TRIGGER "test_trigger" AFTER
INSERT ON TEST_DB
FOR EACH ROW
BEGIN
UPDATE TEST_DB
SET TEST = :new.TEST||11
WHERE 1=1;
END;

이런식으로 작성하니

ORA-04091: SCOTT.TEST_DB테이블이 변경되어 트리거/함수가 볼 수 없습니다.

ORA-06512: "SCOTT.test_trigger",  2행

ORA-04088: 트리거 'SCOTT.test_trigger'의 수행시 오류

이런식으로 뜨는데.. trigger를 어떤형식으로 작성을 해야할까요ㅠㅠ

0
0
  • 답변 7

  • 자라선
    1k
    2019-07-18 11:55:01

    UPDATE 1=1 이면 해당 테이블 모두 업데이트 되버리는데

    이부분에 문제있는게 아닐까요 

    PK가 뭔진 모르겠는데 WHERE에 조건줘야겠죠?

    0
  • 0
  • 몽두
    20
    2019-07-18 16:26:00

    where절에 값 다른걸 넣어줬는데도 문제가 생ㄱ네요ㅠㅠ

    insert하고 update가 같은 테이블을 참조해서 그런거일까요..

    0
  • bayleys
    1k
    2019-07-18 16:51:15

    그렇게는 안돼요... ON절에 쓰인 테이블은 트리거 내부에서 UPDATE 대상이 될 수 없습니다.


    무한루프 돌수 있어서...

    0
  • 자라선
    1k
    2019-07-18 16:55:06 작성 2019-07-18 16:56:09 수정됨
    0
  • 몽두
    20
    2019-07-18 17:55:49

    다들 답변 감사합니다ㅠㅠ

    자기 자신의 테이블을 참조하면 문제가 있을수도 있겠구나 생각은 했었는데 정말 안되네요ㅠㅠ


    일단 주신 링크에서 before절로 해보고... 이것저것 방법 찾아보겠습니다!

    아직 들어오는 데이터를 암호화하는 트리거를 걸려고 했는데 방법이 떠오르질 않네요

    0
  • 자라선
    1k
    2019-07-18 18:02:46

    @몽두

    암호화 때문에 트리거를 쓰시는거면 비추드립니다;;

    아니 에초에 암호화 알고리즘을 DB단에서 사용할수가 있나요?

    직접 구현하실린 없으실텐데..


    보통 아니 일반적으로는 서버단에서 암호화 후 넘겨줍니다.


    0
  • 로그인을 하시면 답변을 등록할 수 있습니다.