2013-02-08 44 views
5

मेरे पास दो टेबल हैं। मैं car तालिका पर एक ट्रिगर बनाना चाहता हूं जो एक निश्चित मान के आधार पर fuel तालिका पर डालें या हटा देगा।पोस्टग्रेएसक्यूएल ट्रिगर सम्मिलित करें या अपडेट करें

कार

id - SERIAL 
fuel - BOOLEAN 

ईंधन

car_id - INTEGER 

मैं ट्रिगर का वर्णन यह की जरूरत नहीं है के रूप में किसी भी पंक्ति डेटा सहित नहीं कर रहा हूँ।

असल में, मैं Car मेज पर एक ट्रिगर बनाना चाहते हैं कि: एक डालने या अद्यतन पर

  • चलाता है।
  • Car.idFuel तालिका में Car.fuel is true डालें।
  • यदि Car.fuel is false, तो ट्रिगर Fuel तालिका में सभी पंक्तियों को हटा देना चाहिए जहां Fuel.car_id = Car.id है।

मैं यह कैसे करूँगा?

संपादित करें: मैं Postgres

+0

देखें http://plsql-tutorial.com/plsql-triggers.htm – asifsid88

+1

मैं हमेशा मान लिया psql Postgres के लिए पहचानकर्ता था .. लेकिन postgres हाँ मैं उपयोग कर रहा हूँ :) – Ozzy

+0

'psql' ज्यादातर के लिए कम है पोस्टग्रेस, यह सच है। लेकिन यह एक टाइपो भी हो सकता है जिसका अर्थ है 'पीएल/पीएसक्यूएल' (जो ओरेकल की प्रक्रियात्मक भाषा है)। पोस्टग्रेस की प्रक्रियात्मक भाषा को 'पीएल/पीजीएसक्यूएल' –

उत्तर

5

उपयोग कर रहा हूँ आप आरडीबीएमएस उल्लेख नहीं किया है के बाद से स्पष्ट करने के लिए, मुझे लगता है यह ओरेकल है। नीचे ट्रिगर है। यदि आप एक और आरडीबीएमएस का उपयोग कर रहे हैं, तो सिंटैक्स फिट करने के लिए कोड को ट्वीक करें।

CREATE OR REPLACE TRIGGER TRG_CAR 
    AFTER INSERT OR UPDATE ON CAR 
    FOR EACH ROW 

    BEGIN 

    IF :new.FUEL THEN 
     INSERT INTO FUEL (CAR_ID) VALUES (:new.ID); 
    ELSE 
     DELETE FROM FUEL WHERE CAR_ID = :new.ID; 
    END IF; 
    END; 
+0

मुझे नहीं लगता कि 'IF: new.FUEL THEN' ओरेकल में काम करेगा क्योंकि इसमें कोई BOOLEAN ** SQL ** डेटाटाइप (केवल पीएल/एसक्यूएल है) नहीं है। तो 'नया' रिकॉर्ड में बूलियन कॉलम नहीं हो सकता है। मुझे वास्तव में लगता है कि ओजी पोस्टग्रेज़ का उपयोग कर रहा है ('psql' पोस्टग्रेस 'कमांड लाइन टूल है) –