1、什么是PL/SQL
- PL/SQL也是一种程序语言,被称作支持SQL的程序语言(Program Language),是Oracle数据库对SQL语句的扩展,在普通的SQL语言中增加了编程语言的特点;
- 数据操作和查询语句被包含在PL/SQL代码的过程性单元中,经过逻辑判断、循环等操作完成复杂的功能或者计算。
2、PL/SQL优点
使用PL/SQL可以编写具有很多高级功能的程序,虽然这些功能可以通过多个SQL语句来完成同样的功能,但是PL/SQL具有如下的优点:
- 使一组语句功能形成模块化程序开发(类似于编程语言中的封装)
- 使用过程性语言控制程序结构(可以使用编程语言控制,if for…)
- 可以对程序中的错误进行处理(可以异常处理)
- 具有较好的可移植性(在oracle之间移植)
- 集成在数据库中,调用更快
- 减少了网络的交互,有助于提高程序性能(减少客户端与数据库服务器之间的交互次数)
3、SQL语句、SQL*Plus命令与PL/SQL语句之间关系
pl/sql是oracle的一门语言,它包括标准SQL,oracle扩展SQL,oracle自定义函数,存储过程,触发器,软件包…;
sql*plus是来格式化查询结果、设置选择、编辑及存储SQL命令、以设置查询结果的显示格式,sqlplus运行解释pl/sql的程序,你也可以在sqlplus里运行sql语句。
4、PL/SQL的数据类型
- 基本数据类型
- 复合数据类型
表类型(table 单列多行):类似于数组,由两个组件组成:
- 数据类型为BINARY_ INTEGER(整 形数字)的主键
- 数据类型为一个确定的简单类型的列
Table类型没有长度限制,可以动态增长.表类型中的第二部分类似与数组中的值,这个部分必须是一个已经确定的简单类型,不能是其他的复合类型表类型的结构很像数组.第一部分使一个按1递增的整形数字,起到数字索引的作用,第二部分使–种确定的简单类型,用来存放每个索引号对应的具体的数值。
DECLARE
--在声明部分 声明表类型
--TABLE_TYPE 表的索引为BINARY_ INTEGER(整形数字),存储的对象为VARCHAR2(6)
TYPE TABLE_TYPE IS TABLE OF VARCHAR2(6) INDEX BY BINARY_INTEGER;
--使用声明的表类型来声明变量
V_TABLE TABLE_TYPE;
BEGIN
--可以通过index来读/取值
--表类型是没有长度限制的
V_TABLE(1):='工程师';
END;
/
记录类型(RECORE 单行多列):类似于集合
由多个组件组成的一种类型.包含一个或几个组件,每个组件称为一个域(FIELD),域的数据类型可以是简单变量类型、另一个RECORD类型或TABLE类型;在使用RECORD变量时把多个域的集合作为一个逻辑单元使用,对记录类型变量赋值或引用,都需要使用“记录变量名城名”的方式来实现;主要用于从表中取出查询到的行数据。
DECLARE
--在声明部分 声明记录类型
TYPE RECORE_TYPE IS RECORE(
ID NUMBER,
EMPNO NUMBER(4),
NAME VARCHAR2(20),
BRITH DATE,
SAL NUMBER(10,2)
);
--使用声明的记录类型来声明变量
V_RECORD RECORE_TYPE%ROWTYPE;
BEGIN
SELECT * INTO V_RECORD FROM EMP;
V_RECORD.NAME;
END;
/
5、%TYPE 与 %ROWTYPE的区别
- %TYPE的前缀可以是已经声明的简单类型,也可以是TABLE类型
- %ROWTYPE前缀肯定都是记录类型,可以是一个表名(不是TABLE类型,是数据库中的表),也可以是前面声明的一个记录类型的变量(该变量必须要参照于一个表,而不能是自定义的记录类型);对于前缀是表,%ROWTYPE会先用表中的字段创建一个记录类型,再用这个记录类型声明变量