第四章异常处理
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