我有一个Biztalk应用程序,它接收xml文件并使用WCF-CUSTOM Adapter将数据简单地插入到一个oracle表中。我的问题有时是在主键列中插入负数。对于主键插入,我使用序列。
我也手动双重检查了序列,它没有生成负数NEXTVAL
。
以下是我的序列:
CREATE SEQUENCE "TEST"."SEQ_TESTBNUMBER_TMP"
MINVALUE 1 MAXVALUE 999999999999999999
INCREMENT BY 1 START WITH 187
NOCACHE NOORDER NOCYCLE ;
这意味着我在主键列中获得的值就像那样
197
-196
195
194
193
192
191
190
189
188
-187
-185
-186
-184
183
182
181
-169
-168
167
166
165
164
显示为负值,但实际上并非如此。它按顺序插入,但在某些情况下,只是在它之前附加( - )减去符号。我不知道为什么。
触发代码:
TRIGGER "TEST"."TR_TESTBNUMBER_TMP"
before INSERT ON "TEST"."NUMBER_RL"
FOR EACH row
BEGIN
IF inserting THEN
IF :NEW."PKID" IS NULL THEN
SELECT SEQ_TESTBNUMBER_TMP.nextval
INTO :NEW."PKID"
FROM dual;
END IF;
END IF;
END;
答案 0 :(得分:1)
IF:NEW。“PKID”为空,然后
上述条件不足以处理序列值的正确插入。您的应用程序正在为PKID
插入负值,而不是空值。因此,以下条件将失败:
IF :NEW."PKID" IS NULL THEN
每当PKID
存在负值时,上述条件就会失败并将负值直接插入表中。您还需要在 IF 条件中处理负值。
将其修改为:
IF :NEW."PKID" IS NULL OR :NEW."PKID" < 0 THEN