संदेश error occurred at recursive SQL level 1
मुझे पता चलता है कि त्रुटि एक ट्रिगर के भीतर उत्पन्न हो रही है। मेरा अनुमान है कि एक AFTER LOGON ON SCHEMA
. है या DATABASE
ट्रिगर, और किसी कारण से जब आपकी वेब सर्वर प्रक्रिया कनेक्ट करने का प्रयास करती है तो यह त्रुटि उत्पन्न करती है।
यहां एक उदाहरण दिया गया है कि आप जो त्रुटि प्राप्त कर रहे हैं उसे कैसे उत्पन्न करें। मेरे पास TINY
. नाम की एक टेबल है , एक एकल स्तंभ के साथ जो केवल 99 तक के मान ले सकता है:
एसक्यूएल> विवरण छोटा; नाम शून्य? टाइप ----------------------------------------- -------- ---------------------------- एन नंबर(2)
अब एक उपयोगकर्ता खाता बनाते हैं और सत्यापित करते हैं कि वे कनेक्ट कर सकते हैं:
SQL> फ़्रेड अकाउंट अनलॉक द्वारा पहचाने गए उपयोगकर्ता फ़्रेड बनाएँ;उपयोगकर्ता बनाया गया।अच्छा - चलो मेरे रूप में वापस लॉग इन करें और एक ट्रिगर बनाएं जो त्रुटि उत्पन्न करेगा यदि
FRED
कनेक्ट करने का प्रयास:एसक्यूएल> कनेक्ट ल्यूक/पासवर्डकनेक्टेड.एसक्यूएल> डेटाबेस 3 पर लॉगऑन के बाद ट्रिगर after_logon_error_if_fred 2 बनाएं या बदलें 4 शुरू करें यदि उपयोगकर्ता ='एफआरईडी' तो 5 छोटे (एन) मानों (100) में डालें; 6 अंत अगर; 7 अंत; 8 /ट्रिगर बनाया गया।याद रखें कि हमारा
TINY
तालिका केवल 99 तक के मान संग्रहीत कर सकती है। तो, क्या होता है जबFRED
कनेक्ट करने का प्रयास?एसक्यूएल> कनेक्ट फ्रेड/फ्रेडईआरआरओआर:ओआरए-00604:पुनरावर्ती एसक्यूएल स्तर 1ORA-01438 पर त्रुटि हुई:इस कॉलम के लिए निर्दिष्ट सटीक से बड़ा मानORA-06512:लाइन 3 परलाइन नंबर के अलावा, और थोड़ा PHP जोड़ा, ठीक यही संदेश आपको मिला है।
अगर आप देखना चाहते हैं कि क्या कोई
AFTER LOGON
है आपके डेटाबेस में ट्रिगर, क्वेरी चलाने का प्रयास करेंSELECT trigger_name, owner FROM all_triggers WHERE TRIM(triggering_event) = 'LOGON';
मेरे डेटाबेस (Oracle 11g XE बीटा) पर, मुझे निम्न आउटपुट मिलता है:
TRIGGER_NAME का स्वामी ---------------AFTER_LOGON_ERROR_IF_FRED LUKEमुझे विश्वास नहीं है कि Oracle कोई लॉगिंग आउट-ऑफ-द-बॉक्स करता है, और मुझे आश्चर्य होगा यदि PHP का
oci_connect
या तो करता है।मैं केवल अनुमान लगा सकता हूं कि त्रुटि केवल आपके वेब सर्वर के लिए क्यों उत्पन्न होती है, न कि जब आप PHP को बैश स्क्रिप्ट से चलाते हैं। शायद ट्रिगर
V$SESSION
. को क्वेरी कर रहा है और यह पता लगाने की कोशिश कर रहा है कि कौन सा उपयोगकर्ता खाता डेटाबेस से कनेक्ट करने का प्रयास कर रहा है?