2016-04-12 28 views
0

Stok stoğunu güncelleştirmek için bir tetikleyici oluşturmak istiyorum. Müşteri tarafından sipariş edilen stok ve miktardaki miktarım iki farklı masada. İkisine de nasıl katılırım?Tablo birleştirmeyle tetikleme

CREATE OR REPLACE 
TRIGGER UPDATE_QUANTITY_TRIGGER 
AFTER insert ON SALE_ORDER 
FOR EACH ROW 
BEGIN 
update product values 
    (:old.product_id, 
    :old.product_name, 
    :old.description, 
    quantity_on_stock-s.quantity, 
    :old.minimal_quantity, 
    :old.unit_price, 
    :old.product_type_id); 
    from product, sale_order s 
    where product.product_id=s.product_id; 
END; 

VEYA

CREATE OR REPLACE 
TRIGGER UPDATE_QUANTITY_TRIGGER 
AFTER insert ON SALE_ORDER 
FOR EACH ROW 
BEGIN 
update product set 
p.quantity_on_stock= p.quantity_on_stock-s.quantity; 
    from product p , sale_order s 
    where p.product_id=s.product_id; 
END; 

sale_order tablo sütunları sale_no, quantity ve product_id sahiptir.

+0

Bu güncelleştirme sözdizimi Oracle'da, bir tetikleyicide veya düz SQL'de geçerli değildir; Bir güncelleme tablosuna (alt sorgu olmadan) katılamazsınız. Neden zaten ": old" ve ": new" pseudorecords satırındaki değerlere sahip olduğunuzda 'sale_order' öğesine katılmıyorsunuz? Böyle bir dengeyi korumaya çalışmak, eşzamanlı işlemler çatışabileceğinden, çok kullanıcılı bir ortamda gerçekten işe yaramaz. –

+0

Sadece ürünü güncellemek istiyorum, kullanmadan etrafta herhangi bir iş var mı: eski? –

cevap

1

Bir güncelleştirme ifadesine katılamazsınız. İkinci girişimin daha yakın ama yine de katılıyor ve hiçbir korelasyonu yok. Ayrıca bir noktalı noktalı virgül var.

CREATE OR REPLACE 
TRIGGER UPDATE_QUANTITY_TRIGGER 
AFTER insert ON SALE_ORDER 
FOR EACH ROW 
BEGIN 
update product p set 
    p.quantity_on_stock = p.quantity_on_stock - :new.quantity 
    where p.product_id = :new.product_id; 
END; 

Bu iki ürün kayıt güncellenmesi ve tarafından stok seviyesini azaltma miktarı elde etmek için tespit etmek :new pseudorecord değerleri kullanır: Ben sizin gibi bir şey arıyoruz düşünüyorum. Tetikleme tablosuna tekrar katılmaya gerek yoktur - bu zaten izin verilmez.

Beklenmeyen davranışlar veya bu tür bir güncelleme işlemini çok kullanıcılı bir ortamda gerçekleştirebilirsiniz.