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

xiaoxiao2021-02-28  48

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)抛出异常。
转载请注明原文地址: https://www.6miu.com/read-77045.html

最新回复(0)