我创建了一个主键自动递增的表。我已经发送了相关的数据,序列和触发器。但是我却在执行一个自动增量为的又没有希望,我的触发不断抛出的错误。
代码:
CREATE SEQUENCE empid_seq
INCREMENT BY 1
START WITH 1101
NOCACHE;
CREATE TRIGGER empuser_trigger
before insert on empuser
for each row
begin
if :new.empuserid.nextval into :new.empuserid from dual;
end if;
end;
/
INSERT INTO empuser VALUES(empid_seq.nextval, 'James', 'Kirk', '+447911123456', '401', '203', (SELECT messageid FROM message WHERE messageid = '2101'));
INSERT INTO empuser VALUES(empid_seq.nextval, 'Spock', 'Spock?', '+447911123466', '401', '203', (SELECT messageid FROM message WHERE messageid = '2103'));
INSERT INTO empuser VALUES(empid_seq.nextval, 'Leonard', 'McCoy', '+447911144456', '401', '203', (SELECT messageid FROM message WHERE messageid = '2104'));
INSERT INTO empuser VALUES(empid_seq.nextval, 'Hikaru', 'Sulu', '+447911123856', '401', '203', (SELECT messageid FROM message WHERE messageid = '2106'));
我想要的是ID在用户输入时自动递增。
答案 0 :(得分:2)
if语句的比较主要问题可能是:
if <some condition> = <other condition> then
:new.empuserid := empid_seq.nextval;
end if;
然后您可以尝试以下操作:
因为只有一个候选列,因为emp user id
是表的第一列,所以从insert语句可以理解,empuser
表没有列,那么您似乎在尝试通过两种方式依次设置emp user id
摆脱其中之一:
删除
:new.empuserid.nextval into :new.empuserid from dual;
,即。删除触发器。
或
empid_seq.nextval,
插入insert语句中,并转换为触发器
:new.empuserid := empid_seq.nextval;
显式列出所有列,但插入语句中empuserid
除外,列为INSERT INTO empuser(col2,col3...) VALUES
。像这样转换这些插入语句
INSERT INTO empuser
SELECT empid_seq.nextval, 'James', 'Kirk', '+447911123456', '401', '203',
messageid
FROM message
WHERE messageid = '2101'