ฉันมีลำดับ 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
รายละเอียดที่อาจเกี่ยวข้องหรือไม่เกี่ยวข้อง:
- Oracle Database 11g Enterprise Edition รีลีส 11.2.0.1.0 - การผลิต 64 บิต
- ขั้นตอนดำเนินการผ่าน Microsoft.Practices.EnterpriseLibrary - Data.Oracle.OracleDatabase.ExecuteReader (คำสั่ง DbCommand)
- แอปพลิเคชันไม่รวมการโทรในธุรกรรมที่ชัดเจน
- การแทรกล้มเหลวเป็นระยะ - น้อยกว่า 1%
ภายใต้สถานการณ์ใดที่อาจx_seq.nextval
เป็นโมฆะ?
v_id
อ้างอิงเฉพาะในการเลือกลำดับการแทรกและเคอร์เซอร์สุดท้าย ขั้นตอนต่อไปของเราคือการเพิ่มรหัสการแก้จุดบกพร่อง เราอาจต้องรอผลเพราะมันเกิดขึ้นในการผลิตและไม่บ่อยนัก มีทริกเกอร์ที่แทรกเข้าไปในตารางการตรวจสอบ ฉันหวีมันโดยไม่มีปืนสูบบุหรี่ ปัญหานี้ยังเกิดขึ้นในตารางอื่นเป็นครั้งคราวโดยไม่มีทริกเกอร์ ขอบคุณสำหรับการดู