카테고리 없음

[신탁] 오라클의 복합 트리거

행복을전해요 2021. 1. 13. 10:40

나는 당신의 시나리오를 다시 만들려고 시도했지만 잘 작동하는 것 같습니다. 따라서 구현을 다시 살펴 봐야한다고 생각합니다. 당신이 코딩 한 것과 여기에 따르는 것 사이의 차이점을 찾으십시오. 아마도 그것이 답이있는 곳일 것입니다.

내 트리거는 다음과 같습니다.

SQL> create or replace
  2  trigger t1_compound
    3  for insert or update on t1
      4  compound trigger
        5
          6      after statement is
            7      begin
              8          update t2 set t1_id = nvl(t1_id,0) + 1 where cod = 12;
                9      end after statement;
                 10  end;
                  11  /
                  
                  Trigger created.
                  
                  SQL>
                  SQL> create or replace
                    2  trigger t2_compound
                      3  for insert or update on t2
                        4  compound trigger
                          5
                            6      after statement is
                              7      begin
                                8          update t3 set t2_id = nvl(t2_id,0) + 1 where cod = 12;
                                  9      end after statement;
                                   10  end;
                                    11  /
                                    
                                    Trigger created.
                                    
                                    SQL>
                                    

... 여기 테스트 데이터입니다 ...

SQL> select id, cod from t1
  2  /
  
          ID        COD
          ---------- ----------
                   1         12
                   
                   SQL> select id, cod, t1_id from t2
                     2  /
                     
                             ID        COD      T1_ID
                             ---------- ---------- ----------
                                     11         12
                                     
                                     SQL> select id, cod, t2_id from t3
                                       2  /
                                       
                                               ID        COD      T2_ID
                                               ---------- ---------- ----------
                                                      111         12
                                                      
                                                      SQL> 
                                                      

... 그리고 이것은 내가 첫 번째 테이블에 대한 업데이트를 발행 할 때 일어나는 일입니다 ...

SQL> update t1 set dt = sysdate
  2  where id = 1
    3  /
    
    1 row updated.
    
    SQL> select id, cod, t1_id from t2
      2  /
      
              ID        COD      T1_ID
              ---------- ---------- ----------
                      11         12          1
                      
                      SQL> select id, cod, t2_id from t3
                        2  /
                        
                                ID        COD      T2_ID
                                ---------- ---------- ----------
                                       111         12          1
                                       
                                       SQL>
                                       
-------------------

트리거를 컴파일 한 후 실행하면 작동하지만 다른 데이터로도 다시 시도하면 THEOTHERTABLE이 업데이트되지 않습니다.

-------------------

나는 그것이 작동해야한다고 생각하지 않는다 ... THEOTHERTABLE에 대한 프로 시저를 만들고이 트리거에서 해당 프로 시저를 호출하면 더 좋을 것입니다.



출처
https://stackoverflow.com/questions/2006203