关键字:
概念;块分类;游标;存储过程
1.概述
(1)PL/SQL是一种程序语言,叫做过程化SQL语言(Procedural Language/SQL)
(2)PL/SQL是数据库对SQL语句的扩展,在普通SQL语句的使用上增加了编程语言的特点,所以可以用来实现比较复杂的业务逻辑。
(3)它允许SQL的数据操纵语言和查询语句包含在块结构(block_structured)和代码过程语言中,使PL/SQL成为一个功能强大的事务处理语言。
(4)PL/SQL的目的是联合数据库语言和过程语言。
2.基本块语法
DECLARE
/*
****声明部分**--**声明变量、常量、复杂数据类型、游标等,这部分可省略
*/
BEGIN
/*
****执行部分**--PL/SQL**语句和**SQL**语句,**必需*
*/
EXCEPTION
/*
****异常处理部分**--**处理运行错误,**可选*
*/
END; --块结束标记
3.块分类
3.1匿名块:以declare或begin开始,能够动态创建和执行过程代码的pl/sql结构,每次都需要进行编译执行,不存储在数据库中
3.2命名块:具有名称的pl/sql块,编译一次后,可多次执行,存储在数据库中
存储过程:存储在数据库中的子过程,无返回值
函数:存储在数据库中的子过程,有返回值
包:可容纳多个过程和函数的一个容器
触发器:无需调用,满足需求的情况下,自动执行
匿名块举例:
4.基本数据类型
4.1标量类型
4.2用户定义类型
4.3%type
含义:使用列属性或变量名加上%TYPE用来标识字段类型
用来表示一个和已有表字段具有相同类型的类型
除继承字段类型外,不能继承字段的其他属性
举例:
4.4%rowtype
一个复合类型,叫做行变量,用来表示和一个现有的表或者视图的行类型相同的类型,一个%ROWTYPE类型变量,可存放SELECT检索结果集的一条记录
举例:
4.5集合类型
关联数组,嵌套表,可变数组
4.6RECORD类型
由单行多列的标量构成的复合结构,将一个或多个标量封装成一个对象
举例:
5.基本语句
5.1非过程化语句(各种SQL语句和游标语句)
举例:
游标:
概念:用来存储多条查询数据的一种数据结构(‘结果集’),它有一个指针,从上往下移动,从而能够遍历每条记录
分类:静态游标:使用前游标已和sql语句绑定,不能再更改,分为隐式游标和显式游标
动态游标:游标在声明时没有设定sql语句,在打开时可以对其进行修改
系统游标:系统预定义的游标sys_refcursor
游标属性 | 类型 | 说明 |
---|---|---|
%ISOPEN | boolean | 表示该游标是否处于打开状态 |
%FOUND | boolean | 表示当前游标是否指向有效一行 |
%NOTFOUND | boolean | 与%FOUND值相反 |
%ROWCOUNT | INT | 记录游标抽取过的记录行数 |
显示游标举例:
隐式游标举例:
5.2过程化语句
包括赋值语句、各种控制结构语句(条件控制语句、循环控制语句),着重介绍存储过程,函数,触发器等。
存储过程:相当于客户端的一段 SQL 批处理程序,无返回值,可接受多个参数,参数模式包括IN、OUT、INOUT三种,被存储在数据库中,供用户随时调用(sys_proc)
举例:
函数:这里所说的函数是指用户定义的函数,可有返回值,被存储在数据库中,供用户随时调用(sys_proc)
举例:
触发器:一种特殊的存储过程定义了一些在数据库相关事件(如:INSERT、UPDATE、 DELETE等事件)发生时应执行的功能代码。
触发器组成:
触发事件:引发触发器被触发的事件DML语句( INSERT、UPDATE、 DELETE语句对表和视图执行数据处理操作)
触发时间:即该触发器是在触发事件发生前(BEFORE)还是之后(AFTER)触发
触发操作:触发器触发后要完成的事情
触发对象:包括表、视图
触发条件:有WHEN子句指定一个逻辑表达式,只有当该表达式为TRUE时,遇到触发事件才会自动执行触发操作
触发频率:说明触发器内定义的动作被执行的次数。即语句级触发器和行级触发器