ठीक है, मैं इसे एक उत्तर के रूप में पोस्ट करूंगा क्योंकि टिप्पणियां इतनी अधिक टेक्स्ट की अनुमति नहीं देगी।
आपकी टेबल देखकर कुछ चीजें अभी भी स्पष्ट नहीं हैं। आपका कार्य ADD_PACIENTE_QUARTO
एक SELECT
लागू करता है कथन जो विधेय बताता है Where PAC = CONT
लेकिन PAC
PACIENTE
में नहीं है का विनिर्देश है, बल्कि स्थानीय चर है जहां आप अपना परिणाम संग्रहीत करते हैं और CONT
आपका पैरामीटर है, यह स्पष्ट नहीं है कि आपने वहां क्या प्रयास किया।
अब आपके ट्रिगर में तर्क और क्रियान्वयन में कुछ खामियां हैं।
सबसे पहले, आपके ट्रिगर का नाम PACIENTE_TRIGGER
है लेकिन लाइन INSERT OR UPDATE ON TIPO_QUARTO
मुझे बताता है कि यह TIPO_QUARTO
पर है तालिका, यह वाक्यात्मक रूप से कोई समस्या नहीं है, लेकिन तार्किक रूप से किसी के लिए बट में दर्द हो सकता है जो यह पता लगाने की कोशिश कर रहा है कि ट्रिगर किस तालिका से संबंधित है।
इसके बाद, INSERT OR UPDATE OF TIPO ON TIPO_QUARTO
का उपयोग करें निवेशनों की निगरानी करने या परिवर्तनों को अपडेट करने के लिए केवल कॉलम में TIPO
का TIPO_QUARTO
टेबल।
अब यह लाइन If :new.TIPO_QUARTO = 'UTI' then
, यह मानते हुए कि यह ट्रिगर TIPO_QUARTO
. से जुड़ा हुआ है तालिका, उस तालिका में TIPO_QUARTO
. नामक स्तंभ नहीं है इसे :new.TIPO
. में बदलें ।
अगला, PAC
VARCHAR
. प्रकार का है इसलिए मुझे यह स्पष्ट नहीं है कि आप PAC := PAC - :new.TIPO;
में क्या करने का प्रयास कर रहे हैं और PAC := PAC + :new.TIPO;
. में दोनों पंक्तियाँ invalid number
फेंक देंगी अपवाद के रूप में आप स्ट्रिंग्स को जोड़ या घटा नहीं सकते हैं, हो सकता है कि आपका इरादा एक सब स्ट्रिंग को जोड़ना या प्राप्त करना था।
और अंत में UPDATE TIPO_QUARTO SET TIPO = PAC
पर कॉल करें। TIPO_QUARTO
. के लिए एक ट्रिगर के अंदर परिणाम mutating table
. में होगा अपवाद, आप किसी तालिका को क्वेरी/अपडेट नहीं कर सकते जो DML स्टेटमेंट के बीच में है (इस मामले में INSERT या UPDATE) इसे ठीक करने के लिए आप बस :new.TIPO := PAC
असाइन कर सकते हैं। ।
इस विवरण का ध्यान रखें और शायद तब आपकी समस्या नहीं रहेगी।