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'
我创建了一个 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'