트리거를 하나 생성하려는데 도와주세요^^;; 0 4 2,016

by 오라왕초보 [2011.03.22 15:41:38]



안녕하세요
제가 포인트 적립에 대한 테이블을 생성하려고 하는데...
우선 제가 만든거부터 보여드릴께요..

SQL> select * from save_table;

CO     NUM     NAME   POINT
-- ----------  ----------------    ----------
01   2 주유     900
01   1  가스    1000
01   2   숙박     800
01   2   호프     700

여기서 num 2번의 포인트를 합산하면

SQL> select num, sum(point)
  2  from save_table
  3  where num = 2
  4  group by num;

  NUM    SUM(POINT)
 ----------   ----------
   2      2400

이렇게 되자나요...
제가 원하는건 이 합쳐진 point 2400점을 total_table에 num=2번에 save컬럼으로 자동 입력 가능하게 되게끔 트리거를 생성하려고 하는데요...

SQL> select * from total_table;

CO  NUM    SAVE     USE
--   -------- -------- --------
01     1
01 2


제가 만들어본 트리거는

CREATE OR REPLACE TRIGGER point
    AFTER
    UPDATE OR DELETE OR INSERT ON save_table
    FOR EACH ROW
BEGIN
    IF UPDATING THEN
    UPDATE total_table
 SET save = (SELECT SUM(point) FROM save_table WHERE num = :OLD.num GROUP BY num)
 WHERE num = :OLD.num
 
    END IF;
 
    IF DELETING THEN
 UPDATE total_table
 SET save = (SELECT SUM(point) FROM save_table WHERE num = :OLD.num GROUP BY num)
 WHERE num = :OLD.num
 
    END IF;
 
    IF INSERTING THEN    
    INSERT INTO save_table(co,num,save)
 SELECT :OLD.co, :OLD.num, (SELECT SUM(point) FROM save_table WHERE num = :OLD.num GROUP BY num)
 
    END IF;
END;
/

제가 뭘 잘못했는지 자꾸 트리거 생성시 오류가 뜨네요...도움좀 부탁드립니다..^^제발요^^;;

by 마농 [2011.03.22 17:06:30]
트리거 걸린 테이블에 대한 Select 는 안됩니다.
다른 대안을 찾으셔야 할듯.

by xx [2011.03.23 06:20:25]
트리거 발생할때마다 매번 sum작업을 해줘야하나요??

by 마농 [2011.03.23 08:47:06]
트리거 안에서 select 가 안되는데 어떻게 sum 이 되나요? 안됩니다.
다른 대안을 찾아보세요.

by 마농 [2011.03.23 08:59:52]
대안1 : 전체 재합산이 아닌 변경분만 반영
save = save + :NEW.point - :OLD.point

대안2 : 트리거가 아닌 어플리케이션에서 구현
댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입