ORA-00904: "TYPE": неверный идентификатор при триггере.Где я ошибся? - PullRequest
0 голосов
/ 02 февраля 2019

Я создал таблицу, в которой первичный ключ автоматически увеличивается.Я отправил соответствующие данные, последовательности и триггеры.Но у меня пока не было надежды на выполнение автоматического приращения, и мой триггер продолжает выдавать ошибки.

Код:

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'));

Я хочу, чтобы идентификатор автоматически увеличивался на пользователявход.

1 Ответ

0 голосов
/ 02 февраля 2019

сравнение для оператора if имеет основную проблему , которая может быть:

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

И тогда вы можете попробовать следующее:

Поскольку есть только один столбец-кандидаттак как emp user id - это первый столбец таблицы, это понятно из оператора вставки, в котором нет списка столбцов для таблицы empuser, а затем кажется, что вы пытаетесь установить emp user id по порядку двумя способами

Избавьтесь от одного из них:

удалите

:new.empuserid.nextval into :new.empuserid from dual;, то есть удалите триггер.

или

empid_seq.nextval, внутри оператора вставки и передачи в триггер как

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