PL/SQL编程基础简介及实践
1、开始(p1~p2)
2、背景介绍(p3)
3、特性优点(p4~p5)
4、使用说明(p6)
5、语法结构(p7)
6、命名参考(p8~p9)
7、复合类型(p10~p16)
8、运算符(p17)
9、流程控制语句(p18~p28)
10、异常和错误处理(p29~32)
11、函数与存储过程(p33~p41)
12、结束(p42)
1、背景介绍
1、 PL/SQL是一种程序语言,叫做过程化SQL语言(Procedural Language/SQL)。 PL/SQL是Oracle数据库对SQL语句的扩展。在普通SQL语句的使用上增加了编程语言的特点,所以PL/SQL就是把数据操作和查询语句组织在PL/SQL代码的过程性单元中,通过逻辑判断、循环等操作实现复杂的功能或者计算程序语言。
2、 PL/SQL类别:数据库引擎、工具引擎(嵌入到其他语言如:C、JAVA)。
3、 PL/SQL包括:编程结构、语法和逻辑机制,工具引擎还增加了支持(如ORACLE Forms)的句法。
3、特性优点
1、提高运行效率
可以将大量数据的处理放在服务端,减少数据在网络上的传输时间。
2、客户端
可以在客服端执行本地的PL/SQL,或通过向服务器发送SQL命令或激活服务器端来运行PL/SQL程序。
3、支持过程化
可嵌入SQL语句,及使用各种类型的条件分支语句和循环语句。
4、支持模块化
可通过使用程序包、过程、函数、触发器等将各类处理逻辑分开,方便管理。
5、支持处理异常
可通过使用自定义异常或使用内置的异常,来处理代码中可能发生的异常,提高代码的健壮性。
6、提供大量内置程序包
可使用Oralce内置程序包,从而更加方便的处理数据及业务流程。
7、其他:更好的性能、可移植性和兼容性、可维护性、易用性等。
4、使用说明
1、允许的语句:
可使用INSERT、UPDATE、DELETE、SELECT INTO、COMMIT、ROLLBACK、SAVEPOINT语句,在PL/SQL中需要以动态的方式使用DDL(CREATE、ALTER、DROP、TRUNCATE)语句。
2、 运行的方式:
PL/SQL可在SQL*PLUS、高级语言、 ORACLE开发工具中使用(如:SQL Developer或Procedure Builder等。
3、运行的过程:
PL/SQL程序的运行是通过Oracle中的一个引擎来进行的。这个引擎可能在Oracle服务器端,也可能在 Oracle 客户端。引擎执行PL/SQL中的过程性语句,然后将SQL语句发送给数据库服务器来执行,再将结果返回给执行端。
5、语法结构
1、PL/SQL组成:由3部分组成:声明部分、执行部分、异常处理部分。
2、结构说明:
--声明部分:声明用到的常量、类型、游标、局部的存储过程、函数
declare
…
--执行部分:具体的SQL语句,包含处理的流程。
begin
…
--异常部分:针对异常处理的SQL语句。
exception
…
end;
6、命名参考
1)标识符:
不区分大小写、不能包含减号(-)、首字符必须为字母,不能是SQL保留字、不能超过30个字符。
2)命名参考:
程序变量:v_name v_orderId 程序常量:c_name c_cityId 游标变量:cursor_name cursor_storeId 异常标示符:e_name e_agentId 记录类型:name_record test_city_record 绑定变量:g_name g_userId 错误:e_error
3)数据类型:(5大类)
1字符类型(CHAR、NCHAR 、VARCHAR、 VARCHAR2、 NVARCHAR2)、2数字类型(NUMBER 、INTEGER 、BINARY_FLOAT 、BINARY_DOUBLE)、3时间类型(DATE 、TIMESTAMP 、INTERVAL YEAR 、INTERVAL DAY)、4大对象类型(BLOB 、CLOB 、BFILE 、NCLOB)、5其他类型(LONG 、RAW LONG RAW 、ROWID 、UROWID) 。
bfile(moive):存放大的二进制数据对象,表中只存放文件的目录。大小<=4GB
blob(photo):存放大的二进制数据对象的位置,位置指向二进制对象的数据块。大小<=4GB
clob(book):存放大的字符数据对象的位置,位置指向字符的数据块。大小<=4GB
nclob(ncahr字符数据):存放大的nchar字符数据对象的位置,位置指向nchar字符的数据块。大小<=4GB
4)变量声明
v_flag boolean not null default false;
identifier [constant] datetype [not null] [:=value|default value |expression]
identifier:变量名称
datetype:变量类型
:=value 变量或常量的初始值
default value:默认值
expression 为函数 其他变量、文本值等
5)注释
--单行注释/*多行注释*/
7、复合类型介绍
1、复合类型:(记录类型、数组类型、一维表类型、二维表类型)
1)记录类型:记录类型类似于c语言中的结构数据类型,它把逻辑相关的、分离的、基本数据类型的变量组成一个整体存储起来,它必须包括至少一个标量型或record 数据类型的成员,称作pl/sql record 的域(field),其作用是存放互不相同但逻辑相关的信息。在使用记录数据类型变量时,需要先在声明部分先定义记录的组成、记录的变量,然后在执行部分引用该记录变量本身或其中的成员。
type record_name is record(
v1 data_type1 [not null] [:= default_value ],
...
vn data_typen [not null] [:= default_value ] );
2)说明:%type:表示变量的数据类型与表对应的列的类型一致
%rowtype:表示变量的数据类型与表对应的所有列的类型一致
可以不用知道列的数据类型、当列的数据类型改变后,修改pl/sql代码
被赋值的变量与select中的列名要一一对应。
declare
id varchar2(32); --证件号码
province varchar2(10); -省份编号
city varchar2(10); --城市编号
district varchar2(10); --区域编号