ORA-00904: "TYPE": 触发器标识符无效。我哪里出错了?

ORA-00904: "TYPE": invalid identifier on trigger. Where have I gone wrong?

我创建了一个 table,其中主键自动递增。我已经发送了相关数据、序列和触发器。但是到目前为止,我还没有希望执行自动增量,而且我的触发器一直在抛出错误。

代码:

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 在用户输入时自动递增。

if 语句的比较有主要问题,可能是:

if <some condition> = <other condition> then 
 :new.empuserid := empid_seq.nextval;
end if;

然后你可以试试下面的方法:

因为只有一个候选列,所以 emp user id 是 table 的第一列,从 insert 语句 has no column listing for empuser 可以理解 table,那么您似乎正在尝试通过两种方式按顺序设置 emp user id

摆脱其中之一:

删除

:new.empuserid.nextval into :new.empuserid from dual;, 即删除触发器。

empid_seq.nextval, inside insert语句,并传入触发器as

: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'