2011-01-11 4 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; 

のようなもの何行はありません次のバージョンは、私はID_DEPO_STOK_IZLEMEidentity列になることが想定されるまでのシーケンスが表示されませんまた、TSQLでトリガします。

+0

マーティン、ur答えのためにありがとうございます。しかし、それは無効です列名 'pk'。エラー。 – mcb

+0

ああ申し訳ありませんが、わかりました、あなたは主キーを意味していました。 – mcb