PLS-00103: Обнаружен символ "ВСТАВКА". Нужна помощь в поиске причины ошибки pl/sql
Я ненавижу делать это, но мой SQL слаб, что я не могу устранить неполадки, используя сообщение об ошибке для исправления синтаксиса. Может кто-нибудь помочь проверить мой синтаксис и посмотреть, что вызывает ошибку? Я думаю, что это как-то связано с объявлением и началом. Может быть, я должен удалить объявление?
Я получаю ошибку PLS-00103: Encountered the symbol "INSERT" when expecting one of the following: . ( * @ % & = - + < / > at in is mod remainder not rem then <an exponent (**)> <> or != or ~= >= <= <> and or lik
PLS-00103: Encountered the symbol "UPDATE" when expecting one of the following: . ( * @ % & = - + < / > at in is mod remainder not rem then <an exponent (**)> <> or != or ~= >= <= <> and or lik <BR>
Мой синтаксис для создания триггера:
create or replace trigger emp_dept_briu
instead of insert or update on emp_dept_v
referencing new as n
old as o
for each row
declare
l_deptno emp.deptno%type;
begin
case
when inserting
insert into emp
( empno, ename , deptno)
values
( :n.empno, :n.ename, :n.deptno )
;
insert into dept
( deptno, dname )
values
( :n.deptno, :n.dname )
;
when updating
update emp
set ename = :n.ename
, deptno = :n.deptno
where empno = :n.empno
;
update dept
set dname = :n.dname
where deptno = :n.deptno
;
else
null
;
end case
;
end
;
2 ответа
Ваш синтаксис просто неверен. Это все
CASE
WHEN INSERTING THEN
INSERT INTO ...;
INSERT INTO ...;
WHEN UPDATING THEN
UPDATE ...;
ELSE NULL;
END;
Но я бы порекомендовал вам пойти на
IF INSERTING THEN
...;
ELSIF UPDATING THEN
...;
ELSE
NULL;
END IF;
Круто, получил его на работу. Спасибо @nexus.
create or replace trigger emp_dept_briu
instead of insert or update on emp_dept_v
referencing new as n
old as o
for each row
declare
l_deptno emp.deptno%type;
begin
CASE
when inserting THEN
insert into emp
( empno, ename , deptno)
values
( :n.empno, :n.ename, :n.deptno )
;
insert into dept
( deptno, dname )
values
( :n.deptno, :n.dname )
;
when updating THEN
update emp
set ename = :n.ename
, deptno = :n.deptno
where empno = :n.empno
;
update dept
set dname = :n.dname
where deptno = :n.deptno
;
else
null
;
end case;
end;