मेरे पास एक Oracle अनुक्रम है जिसे इस तरह परिभाषित किया गया है:
CREATE SEQUENCE "DALLAS"."X_SEQ"
MINVALUE 0
MAXVALUE 999999999999999999999999999
INCREMENT BY 1 START WITH 0 NOCACHE NOORDER NOCYCLE ;
इसका उपयोग संग्रहित प्रक्रिया में रिकॉर्ड डालने के लिए किया जाता है:
PROCEDURE Insert_Record
(p_name IN VARCHAR2,
p_userid IN INTEGER,
cur_out OUT TYPES_PKG.RefCursor)
IS
v_id NUMBER := 0;
BEGIN
-- Get id value from sequence
SELECT x_seq.nextval
INTO v_id
FROM dual;
-- Line below is X_PKG line 40
INSERT INTO X
(the_id,
name,
update_userid)
VALUES
(v_id,
p_name,
p_userid);
-- Return new id
OPEN cur_out FOR
SELECT v_id the_id
FROM dual;
END;
कभी-कभी, यह प्रक्रिया अनुप्रयोग कोड से निष्पादित करते समय एक त्रुटि देता है।
ORA-01400: cannot insert NULL into ("DALLAS"."X"."THE_ID")
ORA-06512: at "DALLAS.X_PKG", line 40
ORA-06512: at line 1
ऐसा विवरण जो प्रासंगिक हो या न हो:
- ओरेकल डेटाबेस 11 जी एंटरप्राइज संस्करण 11.2.0.1.0 - 64 बिट उत्पादन रिलीज
- प्रक्रिया Microsoft.Practices.EnterpriseLibrary - Data.Oracle.OracleDatabase.ExecuteReader (DbCommand कमांड) के माध्यम से निष्पादित की जाती है
- एप्लिकेशन एक स्पष्ट लेनदेन में कॉल को लपेटता नहीं है।
- सम्मिलित रुक-रुक कर विफल - 1% से कम
किन परिस्थितियों में x_seq.nextval
अशक्त हो सकता है?
v_id
केवल अनुक्रम चयन, प्रविष्टि और अंतिम कर्सर में संदर्भित है। हमारा अगला कदम डिबगिंग कोड को जोड़ना था। हमें परिणामों के लिए इंतजार करना पड़ सकता है क्योंकि यह केवल उत्पादन में होता है और बहुत ही कम बार। एक ट्रिगर है जो एक ऑडिट टेबल में सम्मिलित होता है। मैंने बिना किसी धूम्रपान बंदूक के साथ इसके माध्यम से कंघी की है। ट्रिगर के बिना भी समस्या कभी-कभी अन्य तालिकाओं में होती है। निगाह डालने के लिए धन्यवाद।