私はそのように定義された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
でnullになる可能性がありますか?
v_id
シーケンス選択、挿入、および最後のカーソルでのみ参照されます。次のステップは、デバッグコードを追加することでした。結果が本番環境でのみ発生し、まれにしか発生しないため、結果を待つ必要がある場合があります。監査テーブルに挿入するトリガーがあります。私は煙る銃なしでそれをとかしました。この問題は、トリガーのない他のテーブルでも時々発生します。ご覧いただきありがとうございます。