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  /

触发器已创建

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

  • 16
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 7
    评论
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值