一、PL/SQL块结构
要实现PL/SQL程序设计,先介绍如下的基本内容:
二、标识符
PL/SQL程序设计中的标识符定义与SQL的标识符定义的要求相同:
注意: 一般不要把变量名声明与表中字段名完全一样,如果这样可能得到不正确的结果。
三、变量
1. 变量定义
声明:
示例:
赋值:
示例:
2. 变量作用域
在PL/SQL编程中,如果在变量的定义上没有做到统一的话,可能会隐藏一些危险的错误,这样的原因主要是变量的作用域所致。变量的作用域是指变量的有效作用范围,与其它高级语言类似,PL/SQL的变量作用范围特点是:
四、运算符
1. 关系运算符
2. 逻辑运算符
3. 算术运算符
4. 其它运算符
五、数据类型
1. BOOLEAN
该数据用于定义布尔变量,其变量的值为TRUE、FALSE或NULL。注意此类型只能在PL/SQL中使用,表列是没有此类型的。
2. %TYPE
通常用于指定表的某个列的数据类型,可以理解为“的类型”(小技巧:%读“的”)。
示例:
使用%TYPE特性的优点在于:
3. %ROWTYPE
%ROWTYPE操作符,返回一个记录类型,其数据类型和数据库表的数据结构相一致。
示例:
使用%ROWTYPE特性的优点在于:
4. 复合数据类型
4.1. 记录(Record)
记录类型类似于C语言中的结构数据类型,它把分离的、逻辑相关的、基本数据类型的变量组成一个整体存储起来,它必须包括至少一个标量型或RECORD数据类型的成员,称作PL/SQL RECORD的域(FIELD),其作用是存放互不相同但逻辑相关的信息。
语法:
在使用记录数据类型变量时,需要先在声明部分先定义记录的组成、记录的变量,然后在执行部分引用该记录变量本身或其中的成员。
示例1:
说明:我们可以使用DBMS_OUTPUT.PUT_LINE(outdata)或DBMS_OUTPUT.PUT(outdata)将处理结果输出到屏幕上。
运行结果:
示例2(示例中所用到的表及数据见文末):
说明:可以用SELECT语句对记录变量进行赋值,只要保证记录字段与查询结果列表中的字段相配即可。&emp_id表示接收用户的输入。
紧跟着&符号后面的变量被称为替换变量。替换变量对数据库引擎是“不可见的”。其实PL/SQL会用用户输入的文本内容来替换变量引用。
如果你想在代码的不同地方引用相同的替换变量,那就需要在第一个替换变量前面放两个&符号,这样才会为你保留这个值以便后续使用。
输入2,输出结果:
4.2. 表(TABLE)
4.2.1. 索引表
索引表也称为PL/SQL表,它是Oracle早期版本用于处理PL/SQL数组的数据类型。索引表的元素个数没有限制,并且下标可以为负值。
它与记录类型相似,但它是对记录类型的扩展。它可以处理多行记录,使得可以在PL/SQL中模仿数据库中的表。
注意,索引表只能作为PL/SQL复合数据类型使用,而不能作为表列的数据类型使用。
语法结构:
关键字INDEX BY表示创建一个主键索引,以便引用记录表变量中的特定行。
表是集合类型,集合类型常用方法有:
集合方法调用语法为:
示例1:
输出结果:
示例2:
输出结果:
示例3:
输出结果:
4.2.2 嵌套表
嵌套表的元素下标从1开始,并且元素个数没有限制。嵌套表数组元素值可以是稀疏的。
注意:索引表类型不能作为表列的数据类型使用,但嵌套表类型可以作为表列的数据类型。
语法结构:
示例1:
输入2,输出结果:
在表列中也可以使用嵌套表。
在表列中使用嵌套表类型,必须首先使用CREATE TYPE命令建立嵌套表类型。另外注意,必须要为嵌套表列指定专门的存储表。
示例2:
4.3. 数组(VARRAY)
数组是具有相同数据类型的一组成员的集合。每个成员都有一个唯一的下标,它取决于成员在数组中的位置。
语法结构:
示例:
输出结果:
5. 绑定变量
绑定变量是在主机环境中定义的变量。在PL/SQL 程序中可以使用绑定变量作为他们将要使用的其它变量。为了在PL/SQL 环境中声明绑定变量,使用命令VAR或VARIABLE。
当在SQL*Plus中与PL/SQL块之间进行数据交互时,需要使用SQL*Plus绑定变量来完成。
当在PL/SQL中引用非PL/SQL变量时,必须要在非PL/SQL变量前加冒号(“:”)。
示例:
输出结果:
六、常用类型转换函数
CHAR 转换为 NUMBER:
使用 TO_NUMBER 函数来完成字符到数字的转换,如:
NUMBER 转换为CHAR:
使用 TO_CHAR 函数可以实现数字到字符的转换,如:
字符转换为日期:
使用 TO_DATE 函数可以实现 字符到日期的转换,如:
日期转换为字符:
使用 TO_CHAR 函数可以实现日期到字符的转换,如:
七、RETURNNING的使用
示例1:
说明:
数据类型ROWID用于存放数据的行号。
RETURNING子句作用:用于检索INSERT语句中所影响的数据行数,当INSERT语句使用VALUES子句插入数据时,RETURNING 字句还可将列表达式、ROWID和REF值返回到输出变量中。使用RETURNING子句是应注意以下几点限制:
示例2:
说明:
RETURNING子句用于检索被修改行的信息。当UPDATE语句修改单行数据时,RETURNING子句可以检索被修改行的ROWID和REF值,以及行中被修改列的列表达式,并可将他们存储到PL/SQL变量或复合变量中;当UPDATE语句修改多行数据时,RETURNING子句可以将被修改行的ROWID和REF值,以及列表达式值返回到复合变量数组中。在UPDATE中使用RETURNING 子句的限制与INSERT语句中对RETURNING子句的限制相同。
示例3:
说明:
RETURNING子句用于检索被删除行的信息:当DELETE语句删除单行数据时,RETURNING子句可以检索被删除行的ROWID和REF值,以及被删除列的列表达式,并可将他们存储到PL/SQL变量或复合变量中;当DELETE语句删除多行数据时,RETURNING子句可以将被删除行的ROWID和REF值,以及列表达式值返回到复合变量数组中。在DELETE中使用RETURNING子句的限制与INSERT语句中对RETURNING子句的限制相同。
八、注释
在PL/SQL里,有两种注释:
示例:
各示例中所涉及的表及测试数据
?
--------------------------------------分割线 --------------------------------------
--------------------------------------分割线 --------------------------------------