示例一个PLSQL完成功能来说明PLSQL的作用(定义变量+异常处理+抛异常)

PLSQL的作用:
PL/SQL通过使用块结构,可以在一个块中包含多个SQL语句以及PLSQL语句,可以将PLSQL块嵌入到应用程序中,使用PLSQL块后,网络上只需要发送一次
plsql块,就可以完成所有sql语句的处理工作,这样大大减少了网络开销。

示例:

创建的员工表中添加一个新的成员,首先需要判断要添加的员工工号是否存在,
如果存在,则更新该工号对应的员工的信息,否则添加一个新的员工;
SQL> select * from t where t.empno='7788';
     EMPNO ENAME      JOB               MGR HIREDATE           SAL       COMM     DEPTNO
---------- ---------- ---------- ---------- ----------- ---------- ---------- ----------
      7788 SCOTT      ANALYST          7566 1982/12/9         3000                    20

set serveroutput on 
 declare 
l_empno t.empno%type;
l_ename t.ename%type;
l_job t.job%type;
l_mgr t.mgr%type;
l_hiredate t.hiredate%type;
l_sal t.sal%type;
l_deptno t.deptno%type;
l_error varchar2(200);
begin
l_empno :='7788';
l_ename :='SCOTT';
l_job :='CLERK';
l_mgr :='7777';
l_hiredate :=to_date('20170204','yyyy/mm/dd');
l_sal :='6000';
l_deptno :='10';
---首先进行更新操作
update t 
set 
ename=l_ename,
job=l_job,
mgr=l_mgr,
hiredate=l_hiredate,
sal=l_sal,deptno=l_deptno where empno=l_empno ;
dbms_output.put_line('员工信息被更新成功');
if sql%notfound then
----插入到表中
insert into t (empno,ename,job,mgr,hiredate,sal,deptno)
values(l_empno,l_ename,l_job,l_mgr,l_hiredate,l_sal,l_deptno);
dbms_output.put_line('插入信息成功');
commit;
end if;
exception 
when others then
l_error :=sqlerrm;
dbms_output.put_line(l_error);/*这里也可以直接打印sqlerrm  dbms_output.put_line(sqlerrm);*/
end;
/
SQL>  declare
  2  l_empno t.empno%type;
  3  l_ename t.ename%type;
  4  l_job t.job%type;
  5  l_mgr t.mgr%type;
  6  l_hiredate t.hiredate%type;
  7  l_sal t.sal%type;
  8  l_deptno t.deptno%type;
  9  l_error varchar2(200);
 10  begin
 11  l_empno :='7788';
 12  l_ename :='SCOTT';
 13  l_job :='CLERK';
 14  l_mgr :='7777';
 15  l_hiredate :=to_date('20170204','yyyy/mm/dd');
 16  l_sal :='6000';
 17  l_deptno :='10';
 18  ---首先进行更新操作
 19  update t
 20  set
 21  ename=l_ename,
 22  job=l_job,
 23  mgr=l_mgr,
 24  hiredate=l_hiredate,
 25  sal=l_sal,deptno=l_deptno where empno=l_empno ;
 26  dbms_output.put_line('员工信息被更新成功');
 27  if sql%notfound then
 28  ----插入到表中
 29  insert into t (empno,ename,job,mgr,hiredate,sal,deptno)
 30  values(l_empno,l_ename,l_job,l_mgr,l_hiredate,l_sal,l_deptno);
 31  dbms_output.put_line('插入信息成功');
 32  commit;
 33  end if;
 34  exception
 35  when others then
 36  l_error :=sqlerrm;
 37  dbms_output.put_line(l_error);/*这里也可以直接打印sqlerrm  dbms_output.put_line(sqlerrm);*/
 38  end;
 39  /
员工信息被更新成功
PL/SQL procedure successfully completed

此时查看7788这个用户的信息
SQL> select * from t where t.empno='7788';
     EMPNO ENAME      JOB               MGR HIREDATE           SAL       COMM     DEPTNO
---------- ---------- ---------- ---------- ----------- ---------- ---------- ----------
      7788 SCOTT      CLERK            7777 2017/2/4          6000                    10
总结:
①示例中定义变量类型时可以直接使用l_empno t.empno%type;的方式,其实也可以直接赋值 l_empno varchar2(200) :='7788'的方式。
②在这个PLSQL块中包含了一个更新操作和一个插入操作,其实在实际工作中遇到很多类似需求时也可以考虑使用一个merge into语句来完成这样的功能。
最后还对异常进行了处理,这里的话是打印出异常错误信息,其实我们也可以记录到日志里,这时候就需要建立一张日志表,将l_error插入到表里即可。
③在昨天一个需求当中,需要让存储过程出现错误时抛出异常,让java程序捕获到这个异常信息,来控制整个数据的传送,
想到的方式呢就是在最后加RAISE_APPLICATION_ERROR(-20001,l_error)抛出异常。


  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值