2011-01-11 2 views
1

T-SQL이 좋지 않습니다. 어떻게 T-SQL로 트리거 할 수 있습니까? 각각은 T-SQL에서 작동하지 않습니다.PL/SQL 트리거를 T-SQL로 변환

CREATE OR REPLACE TRIGGER DSS.TRG_DEPO_STOK_IZLEME 
    BEFORE INSERT OR UPDATE 
    ON DSS.CR_DEPO_STOK FOR EACH ROW 
BEGIN 

INSERT INTO CR_DEPO_STOK_IZLEME 
      (ID_DEPO_STOK_IZLEME 
      , ID_DEPO_STOK 
      , MT_MIKTAR_ESKI 
      , MT_MIKTAR_YENI 
      , EKLEME_TARIHI 
      ) 
    VALUES (SEQ_ID_DEPO_STOK_IZLEME.NEXTVAL 
      , :NEW.ID_DEPO_STOK 
      , :OLD.MT_MIKTAR 
      , :NEW.MT_MIKTAR 
      , SYSDATE 
      ); 

EXCEPTION 
    WHEN OTHERS 
    THEN 
     NULL; 
END; 
+1

다음 버전까지는 TSQL에 시퀀스가 ​​없습니다. 대신 ID 열을 사용하고 있습니까? 또한'다른 사람이 할 때'무엇합니까? –

+0

예, ID 열을 사용하고 있습니다. 다른 것은 중요하지 않으며 변환 할 필요가 없습니다. – mcb

+1

@MartinSmith : WHEN OTHERS는 PL \ SQL의 처리되지 않은 모든 예외를 포착합니다. 그것은 당신이 코드를 작성하지 않은 오류를 재현하는 데 가장 좋습니다. 위와 같이 "naked"를 사용하면 모든 트래핑되지 않은 예외가 본질적으로 숨겨집니다. 그것에 대한 긴 호언 장담은 다음과 같습니다. http://asktom.oracle.com/pls/apex/f?p=100:11:0:::P11_QUESTION_ID:1270688200346183091 – JAQFrost

답변

1

CREATE TRIGGER DSS.TRG_DEPO_STOK_IZLEME 
    ON DSS.CR_DEPO_STOK 
    AFTER INSERT, UPDATE 
AS 
BEGIN 

INSERT INTO CR_DEPO_STOK_IZLEME 
      (ID_DEPO_STOK 
      , MT_MIKTAR_ESKI 
      , MT_MIKTAR_YENI 
      , EKLEME_TARIHI 
      ) 
SELECT  i.ID_DEPO_STOK 
      , d.MT_MIKTAR 
      , i.MT_MIKTAR 
      , GETDATE() 
FROM INSERTED i FULL OUTER JOIN DELETED d ON i.pk = d.pk    

END; 

같은 아마 뭔가 TSQL 또한 시퀀스가 ​​그래서 ID_DEPO_STOK_IZLEMEidentity 열 것이라고 가정 한 다음 버전까지 표시되지 않습니다에 어떤 행이 트리거되지 있습니다.

+0

martin, ur 대답을 주셔서 감사합니다. 그러나 잘못되었습니다. 열 이름 'pk'. 오류. – mcb

+0

아, 죄송합니다. 기본 키를 의미하는 것을 이해했습니다. 감사합니다. – mcb