Böyle tanımlanmış bir Oracle dizisi var:
CREATE SEQUENCE "DALLAS"."X_SEQ"
MINVALUE 0
MAXVALUE 999999999999999999999999999
INCREMENT BY 1 START WITH 0 NOCACHE NOORDER NOCYCLE ;
Kayıtlı bir yordamda kayıt eklemek için kullanılır:
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;
Bazen bu yordam, uygulama kodundan yürütüldüğünde bir hata döndürür.
ORA-01400: cannot insert NULL into ("DALLAS"."X"."THE_ID")
ORA-06512: at "DALLAS.X_PKG", line 40
ORA-06512: at line 1
Alakalı olabilecek veya olmayabilecek ayrıntılar:
- Oracle Database 11g Enterprise Edition Sürüm 11.2.0.1.0 - 64bit Üretim
- Yordam Microsoft.Practices.EnterpriseLibrary - Data.Oracle.OracleDatabase.ExecuteReader (DbCommand komutu) aracılığıyla yürütülür.
- Uygulama, çağrıyı açık bir işlemde sarmaz.
- Ek parça aralıklı olarak başarısız -% 1'den az
Hangi şartlar altında x_seq.nextval
boş olabilir ?
v_id
yalnızca dizi seçimi, ekleme ve son imleçte belirtilir. Bir sonraki adımımız hata ayıklama kodunu eklemekti. Sadece üretimde ve çok seyrek olduğu için sonuçları beklemek zorunda kalabiliriz. Bir denetim tablosuna eklenen bir tetikleyici vardır. Sigara silahı olmadan taradım. Sorun, zaman zaman tetikleyici olmayan diğer tablolarda da oluşur. Baktığınız için teşekkürler.