Tôi có một chuỗi Oracle được định nghĩa như vậy:
CREATE SEQUENCE "DALLAS"."X_SEQ"
MINVALUE 0
MAXVALUE 999999999999999999999999999
INCREMENT BY 1 START WITH 0 NOCACHE NOORDER NOCYCLE ;
Nó được sử dụng trong một thủ tục được lưu trữ để chèn một bản ghi:
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;
Đôi khi, quy trình này trả về lỗi khi được thực thi từ mã ứng dụng.
ORA-01400: cannot insert NULL into ("DALLAS"."X"."THE_ID")
ORA-06512: at "DALLAS.X_PKG", line 40
ORA-06512: at line 1
Các chi tiết có thể có hoặc không có liên quan:
- Phiên bản doanh nghiệp cơ sở dữ liệu Oracle 11g Phiên bản 11.2.0.1.0 - Sản xuất 64 bit
- Quy trình này được thực thi thông qua Microsoft.Practices. EntrypriseL Library - Data.Oracle.OracleDatabase.ExecuteReader (lệnh DbCommand)
- Ứng dụng này không bao gồm cuộc gọi trong một giao dịch rõ ràng.
- Việc chèn không liên tục - dưới 1%
Trong hoàn cảnh nào có thể x_seq.nextval
là null?
v_id
chỉ được tham chiếu trong chuỗi chọn, chèn và con trỏ cuối cùng. Bước tiếp theo của chúng tôi là thêm mã gỡ lỗi. Chúng tôi có thể phải chờ kết quả vì nó chỉ xảy ra trong sản xuất và rất không thường xuyên. Có một kích hoạt chèn vào một bảng kiểm toán. Tôi đã chải qua nó mà không có súng khói. Vấn đề đôi khi cũng xảy ra trong các bảng khác mà không có kích hoạt. Cảm ơn đã dành một cái nhìn.