Oracle最无奈错误PLS-00103

#Oracle最无奈错误PLS-00103

最近初学Oracle,各种语法还不熟悉,所以遇到了一个令很多初学者都很无语也无奈的错误PLS-00103。

自己尝试写一个Oracle简单的触发器,其中使用到一些基本语法,本以为会很轻松。(以下为初步代码)

SQL> create or replace trigger tri_dept
  2     before insert or update or delete
  3     on dept
  4  declare
  5     var_tag varchar2(10);
  6  begin
  7     if inserting then
  8             var_tag:='insert';
  9     elseif updating then
 10             var_tag:='update';
 11     elseif deleting then
 12             var_tag:='delete';
 13     end if;
 14     insert into dept_log values(var_tag,sysdate);
 15  end tri_dept;
 16  /

警告: 创建的触发器带有编译错误。

结果执行后系统警告有编译错误,那就用show error;检查吧。

SQL> show error;
TRIGGER TRI_DEPT 出现错误:

LINE/COL ERROR
-------- -------------------------------------------------------
6/9      PLS-00103: 出现符号 "UPDATING"在需要下列之一时:
         := . ( @ % ;

8/9      PLS-00103: 出现符号 "DELETING"在需要下列之一时:
         := . ( @ % ;

12/5     PLS-00103: 出现符号 "TRI_DEPT"在需要下列之一时:
         if

这错误提示简直莫名,初学者(像我)一定大呼什么鬼好吗?

紧接着就陷入检查–重试–百度的循环,终于终于发现错误所在。在其他语言中甚至SQL通用语言中判断语句大多数使用的都是**elseifelse if此类关键词,但Oracle真的很特别,他的判断语句竟是elsif,所以这个错误只是elsif**写错[笑哭]。(以下是正确代码)

SQL> create or replace trigger tri_dept
  2     before insert or update or delete
  3     on dept
  4  declare
  5     var_tag varchar2(10);
  6  begin
  7     if inserting then
  8             var_tag:='insert';
  9     elsif updating then
 10             var_tag:='update';
 11     elsif deleting then
 12             var_tag:='delete';
 13     end if;
 14     insert into dept_log values(var_tag,sysdate);
 15  end tri_dept;
 16  /

触发器已创建

成功!
所以基础语法还是很重要的!!!

你可能感兴趣的:(oracle)