PL/SQL基础知识
- 什么是PL/SQL编程
- PL/SQL(过程编程/SQL)是结合了oracle过程语言和结构化查询语言的一种拓展语言。
- PL/SQL的优点
1.具有编程语言的特点,他能把一组SQL语句放到一个模块中,使去更具有模块的程序的特点
2.采用过程性语言控制程序的结构,也就是说,在PL/SQL中增强逻辑结构,如循环,判断等程序结构
3.PL/SQL可以对程序中的错误进行自动处理,使程序能够在遇到错误时不会中断,及他的处理异常机制
4.具有更好的可移植性,可以移植到另一个Oracle数据库中
5.减少网络的交互,提高程序性能。
- PL/SQL的组成
- 一个PL/SQL块有三部分组成,即声明部分,执行部分,异常处理部分
【DECLARE】
——声明部分:在此声明PL/SQL用到的变量,类型及游标,以及局部的存储过程和函数
BEGIN
——执行部分:过程及SQL语言,即程序的主要部分
【EXCEPTION】
——异常处理部分:错误处理
END;- 变量和常量的声明
语法:
variable_name data_type[(size)][:=init_value];
variable_name 表示变量的名称
data_type表示变量的SQL或PL/SQL数据类型
size指定变量的范围
init_value指变量的初始值
- PL/SQL数据类型
1.标量数据类型
包含单个值,没有内部组件。标量数据类型包括数字,字符,布尔值和日期时间值4类
与Oracle数据库的数据类型的区别:(1).同样类型的大小不同(2).增加了布尔类型
2.LOB数据类型
Oracle提供了LOB(large Object)类型,用于存储大的数据对象的类型。Oracle目前主要支持BFILE,BLOB,CLOB,及BCLOB类型。
3.属性类型
属性用于引用变量或数据库列的数据类型。以及表示表中一行的记录类型
(1).%TYPE
定义一个变量,其数据类型与一定定义的某个数据变量(尤其是标的某一类)的数据类型相一致
(2).%ROWTYPE
返回一个记录类型,其数据类型和数据库表的数据结构相一致,这时可以使用%ROWTYPE
- PL/SQL控制语句
1.条件控制
(1). if语句语法如下
语句一: IF-THEN
IF 条件 THEN
执行语句
END IF;
语句二: IF-THEN-ELSE
IF 条件 THEN
执行语句
ELSE
执行其他语句
END IF;
语句三: IF-THEN-ELSIF
IF 条件1 THEN
执行语句1
ELSIF 条件2 THEN
执行语句2
ELSE
执行其他语句
END IF;
(2).case条件语法如下
语句一:
CASE 条件表达式
WHEN 条件表达式结果 1 THEN 语句段 1;
WHEN 条件表达式结果2 THEN 语句段2;
WHEN 条件表达式结果 N THEN 语句段N;
ELSE STATEMENT N+1;
END CASE;
语句二:
CASE 条件表达式
WHEN 条件表达式 1 THEN 语句段 1;
WHEN 条件表达式2 THEN 语句段2;
WHEN 条件表达式 N THEN 语句段N;
ELSE STATEMENT N+1;
END CASE;
2.循环控制
循环公有三种类型:loop循环,while循环和for循环
(1)loop循环:
LOOP
要执行的语句;
EXiT WHEN <条件语句> --条件满足,退出循环
END LOOP;
(2).WHILE循环语法
WHILE <布尔表达式> LOOP
要执行的语句;
END LOOP;
(3).FOR循环语法
FOR 循环技术器 IN 【REVERSE】 下限 ... 上限 LOOP
END LOOP;
3.顺序控制
按顺序执行语句。包括NULL语句和GOTO语句。
游标
- 游标的基本原理
在oracle中,在执行一个有增删改查语句的PL/SQL块时,oracle会在内存中为其分配一个缓冲区,将执行结果放在这个缓冲区中。而游标是指向该区的一个时针。
- 游标的分类
静态游标和动态游标,静态游标又分为两种,即隐式游标额显示游标
- 显示游标
(1) 声明游标
CURSOR cursor_name [(parameter [, parameter]…)]
[RETURN return_type] IS select_statement;
cursor_name 指游标的名称
parameter 为游标输入指定参数,在指定数据类型,不能长度约束
(2).打开游标
OPEN cursor_name[(parameters)];
(3).提取游标
FETCH cursor_name INTO variables;
variables指的是变量名
(4).关闭游标
CLOSE curso_name; - 显示游标属性
%FOUND :只在DML语句影响一行或多行时,
%FOUND属性才返回TRUE。
%NOTFOUND :与·%FOUND相反
%ROWCOUNT:返回DML影响的行数,没有的话返回0; %ISOPEN:返回游标是否打开
3.使用显示游标删除或更新
CURSOR cursor_naem IS select_statement FOR UPDATE [OF columns]
4.使用循环游标简化游标的读取
FOR record_index IN cursor_name LOOP executable_statements END LOOP;
5.NO_DATA_FOUND 和%NOTFOUND 的区别
(1).select … into 语句返回0条和多条记录时触发NO_DATA_FOUND
(2).当UPDATE或DELETE语句的WHERE字句未找到时,触发%NOTFOUND
(3).在提取循环中%NOTFOUND或%FOUND来确定循环的退出条件,而不用NO_DATA_FOUND