PL/SQL中的异常及PL/SQL中的控制语句(二)

2014-11-24 16:55:50 · 作者: · 浏览: 2
进入循环..14结果是:60
进入循环..15结果是:75
进入循环..16结果是:91
进入循环..17结果是:108
进入循环..18结果是:126
进入循环..19结果是:145
进入循环..20结果是:165
循环结束:165
PL/SQL procedure successfully completed.
SQL> remark while 的循环用法
SQL> remark 语法:while 条件表达式 loop 执行语句; end loop;
SQL> remark ................................................................
SQL> remark 跳转控制:标示跳转的指令是 goto
SQL> remark 语法:执行语句 <<节名称>> 执行语句;
SQL> remark 如果只希望 节 作为一个跳转的点,并不执行任何语句,可以使用null,使用return 结束
程序
SQL> remark 跳转的案例:
SQL> declare
2 sumsal emp.sal%type;
3 begin
4 select sum(sal) into sumsal from emp where deptno=30;
5 if sumsal>2000 then
6 goto first;
7 elsif sumsal>3000 then
8 goto second;
9 else
10 goto third;
11 end if;
12
13 <>
14 dbms_output.put_line('first'||sumsal);
15 return;
16 <>
17 dbms_output.put_line('second'||sumsal);
18 return;
19 <>
20 null;
21 end;
22 /
first9400
PL/SQL procedure successfully completed.
SQL> remark ................................................................
SQL> remark 记录:PS记录只有一行,但是由多列,有点类型于程序中的结构
SQL> remark 记录的定义:type <类型名> is record <列名 1 类型 1,....列名n 类型n,>
SQL> remark 案例:
SQL> edit;
Wrote file afiedt.buf
1 declare
2 type empsub is record (myeno emp.empno%type,myename emp.ename%type,mysa emp.sal
%type);
3 mycord empsub;
4 begin
5 select empno,ename,sal into mycord from emp where empno = 7369;
6 dbms_output.put_line('编号1:'||mycord.myeno);
7* end;
SQL> /
编号1:7369
PL/SQL procedure successfully completed.
SQL> remark empsub 定义了一种数据类型
SQL> remark..................................................................
SQL> remark 异常:一种为内部异常,一种为用户自定义异常;
SQL> remark PS中要捕获异常,必须使用 系统所给的异常名称,而不是异常的编号;
SQL> declare
2 newsal emp.sal%type;
3 begin
4 select sal into newsal from emp where deptno = 30;
5 dbms_output.put_line('工资是:'||newsal);
6 exception
7 when too_many_rows then
8 dbms_output.put_line('数据插入记录太多');
9 end;
10 /
数据插入记录太多
PL/SQL procedure successfully completed.
SQL> remark 自定义异常
SQL> remark declare 异常名 exception; ----声明异常
SQL> remark raise 异常名; --抛出异常
SQL> remark exception when 异常名 then 。....-- 捕获异常 并进行相关的处理
SQL> remark RAISE_APPLICATION_ERROR(错误编码,错误消息);
SQL> remark 错误编码:用户为抛出异常指定的编号,-20000和-20999之间
SQL> remark 错误消息:是用户定义的错误的消息,消息的长度是2048;
SQL> declare
2 thesal emp.sal%type;
3 begin
4 select sal into thesal from emp where empno=7369;
5 if thesal>2000 then
6 raise_application_error(-20001,'工资不再调整的范围');
7 end if;
8 end;
9 /
PL/SQL procedure successfully completed.
SQL> remark ................................................................
SQL> remark 动态SQL ,动态的构造一个查询语句;语法:
SQL> remark execute