【Oracle】第四章异常处理(一)

2015-02-02 20:33:47 · 作者: · 浏览: 32

第四章异常处理

PL/SQL 块是构成 PL/SQL 程序的基本单元

将逻辑上相关的声明和语句组合在一起

PL/SQL 分为三个部分,声明部分、可执行部分和异常处理部分

[DECLARE

declarations]

BEGIN

executable statements

[EXCEPTION

handlers]

END;

以下示例演示了如何使用PL/SQL 语句:

declare

area integer;

width integer;

height integer;

currentdate date;

cnumber constant integer := 10;

begin

area :=10;

height :=2;

width := area/height;

currentdate :=sysdate;

DBMS_OUTPUT.put_line('宽 = '||width);

DBMS_OUTPUT.put_line('高 ='||height);

DBMS_OUTPUT.put_line('面积 ='||area);

DBMS_OUTPUT.put_line('常量的值为:'||cnumber);

DBMS_OUTPUT.put_line('当前时间为:'||currentdate);

exception

when zero_divide then

DBMS_OUTPUT.put_line('除数不能为零');

end;

给变量赋值有两种形式:

使用赋值语句 :=

使用 SELECT INTO 语句

使用常量赋值:

cnumber constant integer := 10;

?

以下代码演示了使用常量和SELECT INTO 语句:

?

declare

firstName varchar2(20);

lastName varchar2(20);

employeeid number;

consNumber constant integer :=1000;

begin

select employee_id, first_name,last_name into employeeid, firstName,lastname from employees2 where employee_id =1;

DBMS_OUTPUT.put_line('consNumber = '||consNumber);

DBMS_OUTPUT.put_line('employeeid='||firstName);

DBMS_OUTPUT.put_line('firstName='||firstName);

DBMS_OUTPUT.put_line('lastName='||lastname);

end;

CLOB数据类型的使用。

create table my_book_text(

chapter_id number(3),

chapter_descr varchar2(40),

chapter_text clob);

添加数据到clob字段 chapter_text :

insert into my_book_text values(5,'第五章 PL/SQL 简介','PL/SQL 可用于创建存储过程,触发器和程序包等,用来处理业务规则,数据库时间或给SQL命令的执行添加程序逻辑。');

读取 CLOB 数据类型:

set serveroutput on

declare

clob_var clob;

amount integer;

offset integer;

output_var varchar2(100);

begin

select chapter_content into clob_var from my_book_text where chapterid=1;

amount :=20;

offset :=5;

DBMS_LOB.READ(clob_var,amount,offset,output_var);

DBMS_OUTPUT.put_line(output_var);

end;

/

?

?

?

?

?

PL/SQL 支持的流程控制结构:

条件控制

IF 语句

CASE 语句

循环控制

LOOP 循环

WHILE 循环

FOR 循环

顺序控制

GOTO 语句

NULL 语句

以下代码演示了条件控制(IF-THEN-ELSE语句):

declare

age number(8);

begin

age := &age;

if age>20 and age<30 then

dbms_output.put_line('年龄在20 和30 之间 ');

elsif age < 20 then

dbms_output.put_line('年龄小于20');

else

dbms_output.put_line('年龄大于30');

end if;

end;

/

以下代码演示了从 employees2 表中检索employee_id 为 3 的记录 ,如果 salary 大于 15000 则减去 1000 ,否则salary 加 100

declare

firstName varchar(20);

lastName varchar2(20);

salarytemp number(10);

begin

select first_name,last_name,salary into firstName,lastName,salarytemp from employees2 where employee_id=3;

if salarytemp > 15000 then

update employees2 set salary = salary-1000 where employee_id = 3;

else

update employees2 set salary = salary+100 where employee_id=3;

end if;

dbms_output.put_line('firstName ='||firstName);

dbms_output.put_line('lastName='||lastName);

dbms_output.put_line('salarytemp = '||salarytemp);

end;


Case 语句:

以下代码演示了选择器。系统先计算选择器值。然后再依次选择 WHEN 子句。

set serveroutput on

begin

case '&grade'

when 'A' then dbms_output.put_line('优异');

when 'B' then dbms_output.put_line('优秀');

when 'C' then dbms_output.put_line('良好');

when 'D' then dbms_output.put_line('一般');

when 'E' then dbms_output.put_line('较差');

else dbms_output.put_line('没有此成绩');

end case;

end;

/

Loop 循环:以下代码演示了loop的使用

declare

x number