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;
Другие вопросы по тегам