【发布时间】:2011-05-19 06:51:14
【问题描述】:
我创建了一个从 1 开始没有最大值的序列 我已经创建了一个自动插入主键的触发器,如下所示 我还为主键必须唯一且不为空的表设置了约束
create trigger MY_TEMP_TRIGGER
before insert on MY_TEMP
for each row
BEGIN
SELECT MY_TEMP_SEQ.nextval
INTO :new.Id
FROM DUAL;
END;
/
INSERT INTO my_temp
(Id,Type, CreateDT, TypeId, TempType, DevType, Msg, File,User, Src, SrcDev)
VALUES
(MY_TEMP_SEQ.nextval,3434,2843,2453,2392,435,2390,'pension.txt','rereee',454545,3434)
结果:
第 1 行出现错误:
ORA-00001: 违反了唯一约束 (USER.PK_MY_TEMP)
表 MY_TEMP 已经包含 Id 字段从 1 到 338 的值
那么,我应该如何在触发器和插入语句中处理这个问题。
【问题讨论】:
-
不要忘记检查您的序列是否返回了表中尚不存在的值(并且高于现有值)。
标签: sql oracle oracle11g ora-00001