一、定义:
PL= procedure language
SQL= Structured Query Language
PL/SQL = PL+SQL,是SQL语言的扩展
二、分类:
匿名块:没有名字的PL/SQL块,只能执行一次,不能存储在数据库中。
非匿名快:有名字的PL/SQL块,可以根据名字多次执行,可以存储在数据库中。如:存储过程、包、触发器。
三、结构:
PL/SQL块组成:
declare (可选)
.....
begin
.....
exception (可选)
.....
end;
说明:
【1】declare
1)变量声明区域
2)用于PL/SQL变量声明,所有变量均需要在此处声明;
3)若在PL/SQL块中不需要变量,则可略去该部分。
【2】begin
1)是块体开始关键字,必须存在。
【3】exception
1)是异常捕获区域;
2)如有异常需捕获则需编写该部分代码,
3)如无需捕获异常,则可略去该部分。
4)异常捕获实例,见本文末尾(异常捕获实例)
【4】end;
1)块体结束关键字,必须存在。其后必须有分号“;”
【5】
1)在每个块结束时,其后必须要加上分号“;”(英文输入模式下的).
2)在每个语句结束时,末尾需要加上分号“;”(英文输入模式下的).
四、实例:
(1)标准PL/SQL块
declare
name varchar2(20);
x number;
y number;
begin
name := 'HanGuo';
dbms_output.put_line('The name is '||name);
x := 20;
y := x/0; --除数为0,必然报错,这将导致程序运行失败,所以需要捕获异常,并处理。
dbms_output.put_line('x divide 0 is '||y);
exception
when others then
dbms_output.put_line('ERRORS-20010:It is 0 for divide number');
end;
(2)无declare部分的PL/SQL块
--如果PL/SQL块之中不需要声明变量,则可以略去'declare'部分,如下实例:
begin
for x in 1 .. 10
loop
dbms_output.put_line('The is th'||x||' time;');
end loop;
exception
when others then
dbms_output.put_line('ERRORS-20010:It is 0 for divide number');
end;
(3)无exception部分的PL/SQL块
--如果PL/SQL块之中不需要捕获异常,可以略去'exception'部分,如下实例:
declare
name varchar2(20);
age number(5);
sex varchar2(6);
begin
name := 'HanGuo';
age := 29;
sex := 'male';
dbms_output.put_line(name||' is '||sex||',age is '||age);
end;
(4)无declare和exception部分的PL/SQL块
--PL/SQL块中可以略去'declare’和‘exception'这两部分,如下实例:
begin
dbms_output.put_line(sysdate);
end;
-------------------------------------------------------------
begin
for x in 1 .. 10
loop
dbms_output.put_line('The is th'||x||' time;');
end loop;
end;
(5)异常捕获实例
declare
x number;
begin
x := 20;
x := x/0; --除数为0,必然报错,这将导致程序运行失败,所以需要捕获异常,并处理。
dbms_output.put_line('x divide 0 is '||x);
exception
when others then
dbms_output.put_line('ERRORS---0001 :It is 0 for divide number');
end;
阅读(288) | 评论(0) | 转发(0) |