다음과 같이 정의 된 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
시퀀스 선택, 삽입 및 최종 커서에서만 참조됩니다. 다음 단계는 디버깅 코드를 추가하는 것이 었습니다. 결과는 프로덕션에서만 발생하고 매우 드물기 때문에 결과를 기다려야 할 수도 있습니다. 감사 테이블에 삽입하는 트리거가 있습니다. 나는 금연 총으로 그것을 빗질했습니다. 트리거가없는 다른 테이블에서도이 문제가 발생합니다. 한번 봐 주셔서 감사합니다.