附加( - )减去oracle表的PK列中的符号

时间:2015-11-17 05:27:36

标签: sql oracle triggers sequence biztalk

我有一个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;

1 个答案:

答案 0 :(得分:1)

  

IF:NEW。“PKID”为空,然后

上述条件不足以处理序列值的正确插入。您的应用程序正在为PKID插入负值,而不是空值。因此,以下条件将失败:

IF :NEW."PKID" IS NULL THEN

每当PKID存在负值时,上述条件就会失败并将负值直接插入表中。您还需要在 IF 条件中处理负值。

将其修改为:

IF :NEW."PKID" IS NULL OR :NEW."PKID" < 0 THEN