2016-04-02 16 views
-4

Tetikleyicim ile ilgili bir sorunum var (oracle ile yeniim) Bu tetikleyici ile yeni bir sözleşme eklerken istiyorum ve bu sözleşmelerin, bu kullanıcının diğer sözleşmesinin söz konusu bitiş_tarihi olan bir başlangıç_tarihi var Tetikleyici eski bitiş_tarihi yeni sözleşmenin başlangıç_tarihi olarak değiştirmelidir.Bu kolay tetikleyicinin çözümü

CREATE OR REPLACE TRIGGER Date_contracts 
    BEFORE INSERT OR UPDATE OF START_DATE ON CONTRACTS 
    FOR EACH ROW 
    BEGIN 
     IF :NEW.START_DATE < (SELECT DISTINCT END_DATE FROM CONTRACTS WHERE SSN = NEW.SSN) 
     THEN OLD.END_DATE := NEW.START_DATE; 
     END IF; 
    END; 
    /

Ve sql developres alt sorgu bu bağlamda izin verilmez diyor:

İşte benim kodudur. Eminim ki tamir etmek ama bunu çözemiyorum çünkü seviyesi çok düşük. Sana

+0

O ** En fazla 1 kaydını döndürebilir gösteren bir uyarıdır * * –

+0

Eski başlangıç ​​tarihini değiştirebileceğinizi düşünüyorsanız, temel tetikleme tetikleyicileriniz vardır. –

cevap

0

1.

SSN = NEW.SSN problemin neden olabilir bir veya daha fazla kayıt iade SÖZLEŞMELERİ DISTINCT END_DATE SEÇ teşekkürler :) bana yardımcı umuyoruz. Tetik soruna neden olabilir oluşturulduğu tetikleyicisi içinde aynı tablodan seçerek

2.

.

Teşekkür

+0

Evet, sorun buydu :) Teşekkürler – Nogus

0

kamış yaklaşık Using Triggers
Ayarlayabilecekleriniz koyamazsınız: ESKİ. değerler - Bu okunduğunda tek değer: muhtemelen yapmanız deneyin ... (eski değerler güncellemeden önce güncellenmiş sıranın değerindedir) bu

update CONTRACTS set END_DATE = :NEW.START_DATE 
where SSN = :NEW.SSN and END_DATE < :NEW.START_DATE and someid <> nvl(:OLD.someid, :NEW.someid) 
İlgili konular