PL/SQL 是一种可移植的高性能事务处理语言.
PL/SQL引擎留在Oracle服务器中.
PL/SQL快由声明部分,可执行部分和错误处理部分组成.
PL/SQL数据类型包括标量数据类型,LOB数据类型和属性类型.
PL/SQL程序可通过控制结构命令执行的流程.
PL/SQL使用一次增强程序的健壮性,包含预定义异常和用户自定义异常.
游标是在PL/SQL中构建的用来查询数据,获取记录集合的指针
游标类型包括隐式游标,显示游标和REF游标.
显式游标用于可得到多行结果的查询中,可以声明为带参数或不带参数两种类型.
循环游标用于简化处理游标中所有行的查询.
存储过程用户执行特定的任务.
什么是pl/sql:
PL/SQL是 Procedure Language & Structured Query LanguProcedure的缩写
是一种过程处理语言
PL/SQL是 ORACLE系统的核心语言,ORACLE的许多部件都是由 PL/SQL编写的
PL/SQL的好处: PL/SQL在数据库服务器上运行,节约网络带宽,在数据库端运行效率更高
PL/SQL块:
PL/SQL程序由三个块组成:声明部分,执行部分,异常处理部分
PL/SQL程序的结构如下:
1.PL/SQL变量声明:
变量声明所要做的主要工作:赋予变量适当的名称,正确的数据类型,控制变量的作用范围。
变量命名规则:由字母开头,可以包含数字,下划线(_),$,#等,不区分大小写,不可以是系统关键字。
一个简单的PL/SQL变量声明的例子如下:
declare
x varchar2(10);
begin
x:=’This is x……’; --为变量x赋值,赋值符号为(:=)
DBMS_output.put_line(‘x的值为:’|| x); --在命令行控制台打印输出变量x的值
end;
/ --执行该PL/SQL程序块
3.PL/SQL中的分支语句:
PL/SQL中有两种分支语句:if分支和case分支。
(1).if分支:
if …… then
……
elsif …… then --注意Oracle中的elseif写法为(“elsif”),比较特殊
……
else
……
end if;
(2).case分支:
case
when …… then ……
when …… then ……
else ……
end case;
4.PL/SQL中的循环:
PL/SQL中有三种循环:基本循环,while循环和for循环:
(1).基本循环(loop):
loop
……
end loop;
(2).While循环:
while expression loop
……
end loop;
(3).for循环:
for counter in[reverse] start_value … end_value loop --注意:reverse是从大到小,默认是从小 --到大。start_value和end_value之间是两个点(…)
……
end loop;
注意:若想要在PL/SQL循环中跳出循环,可以使用以下两种方法:
a. if …… then
exit;
end if;
b.exit when ……;
5.PL/SQL for循环的简单例子:
设置Oracle控制台屏幕输出命令:set serveroutput on.
PL/SQL for循环的简单例子:
begin
for i in 1…5 loop
DBMS_output.put_line(‘i=’|| i);
end loop;
end;
/
6.PL/SQL中支持goto跳转语句:
在很多编程语言中,goto语句都不支持或者不推荐使用,在PL/SQL中是支持goto跳转的,其使用方法如下:
declare
x number;
begin
x:=0;
<<repeat_loop>> --goto跳转标记
x:=x+1;
DBMS_output.put_line(‘x=’||x);
if x < 3 then
goto repeat_loop; --程序跳转到goto跳转标记处
end if;
end;
/
7.PL/SQL中的异常处理:
语法:exception
when …… then
……
例子如下:
exception
when no_data_found then --oracle系统异常
DBMS_output.put_line(‘自定义异常信息’);
注意:PL/SQL异常必须在begin和end之间使用。
8.PL/SQL自定义异常:
PL/SQL自定义异常很简单,要使用自定义异常必须显示抛出自定义异常,例子如下:
declare
test varchar2(20);
e exception; --声明自定义异常变量
begin
select ename into test from emp where empno = ‘……’;
if test <> ‘KING’ then
raise e; --显示抛出自定义异常
end if;
DBMS_output.put_line(‘ename=’||test);
exception
when e then
DBMS_output.put_line(‘自定义异常信息’);
end;
/
2.隐式游标:
隐式游标不需要在declare块中先是声明定义,也不需要手动打开和关闭,一个简单的隐式游标的例子如下:
begin
for cur in (select ename from emp) loop --此处的cur就是隐式游标
DBMS_output.put_line(‘ename=’ || cur.ename);
end loop;
end;
/
13.存储过程:
存储过程是一组实现特定功能的PL/SQL语句块,被数据库编译编译以提高效率。
(1).创建存储过程的语法:
create [or replace] procedure 存储过程名
[(param1 [{in | out | in out}])] 参数类型1, --in是输入参数,out是输出参数
[(param2 [{in | out | in out}])] 参数类型2, – in out是输入输出参数,不指定时默认是in
……
is | as
……
begin
存储过程体
end;
/
注意:当存储过程编译出错时,可以使用”show errors procedure 存储过程名”来显示错误信息。