Oracle
 sql >> डेटाबेस >  >> RDS >> Oracle

ट्रिगर अगर-और स्टेटमेंट एरर नहीं उठाया जा रहा है

जब आप तालिका को मैन्युअल रूप से अपडेट करते हैं तो ट्रिगर आपकी अपेक्षा के अनुरूप काम करता है।

जब प्रक्रिया से कॉल किया जाता है तो ट्रिगर एक अमान्य राशि की रिपोर्ट नहीं करता है, और भुगतान की गई पूरी राशि दिखाता है, भले ही वह नहीं थी - भुगतान राशि नहीं बदली है लेकिन अन्य कॉलम हैं।

ऐसा इसलिए है क्योंकि आपकी प्रक्रिया का अद्यतन विवरण है:

UPDATE Payment
SET paymenttype = PAYMENT_TYPE,
  paymentdate = TO_CHAR(sysdate,'DD/MON/YYYY'),
  paymentstatus = v_paymentstatus
where paymentid = PAYMENT_ID;

आप इसे राशि अपडेट करने के लिए नहीं कह रहे हैं, इसलिए ट्रिगर में कोई संशोधित :new नहीं है मूल्य - पुराने और नए समान हैं। आपको उस कॉलम को अपडेट में शामिल करना होगा:

UPDATE Payment
SET paymenttype = PAYMENT_TYPE,
  paymentdate = TO_CHAR(sysdate,'DD/MON/YYYY'),
  paymentamount = amt_pay,
  paymentstatus = v_paymentstatus
where paymentid = PAYMENT_ID;

db<>fiddle

TO_CHAR(sysdate,'DD/MON/YYYY') अजीब लग रहा है - तालिका कॉलम एक तारीख होना चाहिए न कि एक स्ट्रिंग, इसलिए आपको उस मान को एक स्ट्रिंग में परिवर्तित नहीं करना चाहिए; यदि कॉलम एक तारीख है तो आप इसे वापस बदलने के लिए क्लाइंट की एनएलएस सेटिंग्स पर भरोसा कर रहे हैं। यदि आप वर्तमान समय को अनदेखा करने का प्रयास कर रहे हैं तो आप TRUNC(sysdate) कर सकते हैं इसके बजाय।

आपको dbms_output . पर भी भरोसा नहीं करना चाहिए प्रक्रिया निकाय में - आप यह नियंत्रित नहीं कर सकते हैं कि इसे कॉल करने वाले व्यक्ति के पास आउटपुट सक्षम है या नहीं, इसलिए उन्हें कभी कोई समस्या नहीं दिखाई दे सकती है। जैसा कि आप ट्रिगर में एक अपवाद उठा रहे हैं, आप अन्य त्रुटियों के लिए प्रक्रिया में भी ऐसा ही कर सकते हैं।




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. WHERE क्लॉज के साथ उपयोग किए जाने पर Oracle कनेक्ट को ऑप्टिमाइज़ करना

  2. Oracle सिंटैक्स लेफ्ट तीन या अधिक तालिकाओं को जोड़ता है

  3. Oracle के साथ चुनिंदा परिणामों को स्थानांतरित करें

  4. hibernate.jdbc.fetch_size या @QueryHints(@javax.persistence.QueryHint(name=org.hibernate.fetchSize, value=10)) काम नहीं कर रहा है

  5. ओरेकल में टैन () फ़ंक्शन