ORACLE PL/SQL
1. PL/SQL 是 SQL 语言存储过程的扩展 , 包括两部分 : 一部是数据库引擎部分 , 另一部分是可嵌入到其他许多产品 (C,JAVA) 工具中的独立引擎 . 可将这两部分称为数据库 PL/SQL 和工具 PL/SQL. 以下介绍的是数据库 PL/SQL
2. PL/SQL 语言由以下几部分组成 :
1) 数据库定义语言 (DDL). 用于执行数据库中的任务 , 对数据库以及数据库中的各种对象进行创建 . 删除 , 修改 .
命令
功能说明
ALTER PROCEDURE
重新编译存储过程
ALTER TABLE
修改表
ANALYZE
收集数据库对象性能统计资料
ALTER TABLE AND CONSTRAINT
在已有表上增加约束
CTREATE TABLE
创建表
CREATE INDEX
创建索引
DROP TABLE
删除表
DROP INDEX
删除索引
2) 数据操纵语言 (DML). 用于操纵数据库中各种对象 , 检索 , 或修改数据 . 在使用 DML 前 , 必须获得相应的权限 .
命令
功能说明
SELECT
查询数据库
INSERT
插入一行记录
UPDATE
修改数据库记录
DELETE
从表中删除数据
3) 数据控制语言 (DCL) 用于安全管理 , 确定哪些用户可以查看或修改数据库中的数据 ,DCL 包括的主要语句及其功能如下 :
命令
功能说明
GRANT
将用户或角色授与用户和角色
REVOKE
从用户或角色收回权限
PL/SQL 是面向过程的程序结构 , 包括以下几点 :
1) 变量和类型
2) 控制语句
3) 过程和函数
4) 对象类型和方法
3. PL/SQL 结构 :
DECLARE
/** 变量声明 **/
BEGIN
Statements
Exceptions
END
其中变量声明和异常是可选的 .
4. PL/SQL 标识符 : 所有的大小写英文字母 , 数字 0-9, 常用符号 ( 无 ”-“), 最大标识符为 30 个字符
5. PL/SQL 运算符 : 算术运算符 {+,-,*, / ,**( 指数 ),||( 连接 )}, 关系运算符 { 常用比较运算符 ,BETWEEN AND ,IN ,LIKE,IS NULL}; 逻辑运算符 {AND , OR ,NOT}
6. 其他符号
符号
意义
样例
( )
列表分隔
(‘john’,’rose’)
;
语句结束
Procedure_name(arg1,arg2)
.
项分离
Select * from account.table
‘
字符串定界符
If var1=’a+1’
:=
赋值
a:=a+1
||
并置
Fullname:=’a’||’b’
--
注释符
--this is a comment
/* */
注释定界符
/*this too is a comment*/
7. PL/SQL 变量 : 变量的类型可以是 PL/SQL 中的 , 也可以是自定义的 .
变量的定义 :< 变量名 >< 数据类型 >[( 宽度 ):=< 初始值 >]
如 :count varchar2(20):=’1’;
变量的属性包括变量名和数据类型
%TYPE 属性提供了变量和数据列的数据类型 .
如 :my_xh XS.XH%TYPE 表示变量 my_xh 和字段 XH 拥有相同的数据类型 .
使用 %TYPE 有两个优点 :
1) 不必知道 XH 列的确切数据类型
2) 如果改变了 XH 的列定义 ,my_xh 的数据类型在运行时可自动修改 .
%ROWTYPE 用于声明表的行记录 . 对用户自定义的域 . 记录包含唯一的命名域 , 具有不同的数据类型 .
DECLARE
TYPE TimeRec is RECORD (HH number(2),MM number(2));
TYPE MeetingTyp is RECORD
(
Meeting_Date date,
Meeting_Time TimeRec,-- 嵌套变量
Meeting_Addr varchar2(20),
Meeting_Purpose varchar2(50)
)
DECLARE
cj_rec XS_KC%ROWTYPE
引用
my_xh := cj_rec.xh;
如果使用了游标提取 XH,KCH,CJ,XF 则可以使用 %ROWTYPE 声明一个记录保存相同的信息 .
DECLARE
CURSOR
IS
SELECT XH,KCH,CJ
FROM XS_KC
Cj_rec c1%ROWTYPE;
当执行下面的语句时
FETCH c1 INTO cj_rec;
在 XS_KC 表的 XH 列的值就是赋于 cj_rec 的 XH 域
变量的作用域 : 位于 BEGIN END 之间
PL/SQL 常量定义 :
< 常量名 >CONSTANT< 数据类型 >:=< 值 >
PL/SQL 常用数据类型 :
VARCHAR 类型
NUMBER 类型
DATE 类型
BOOLEAN 类型
* 用户自定义数据类型
语法格式 :
TYPE typename IS system_data_type
Typename 是用户自定义的数据类型名称 ,system_date_type 是自定义类型依赖的基类型
定义一个记录类型
TYPE xs_rec IS RECORD
{
Xh number(2) not null:=1;
Xm char(8)
}
数据类型转换 :
1) TO_CHAR( 将 NUMBER,DATE 转换成 VARCHAR2 类型 )
2) TO_DATE( 将 CHAR 转换成 DATE 类型 )
3) TO_NUMBER: 将 CHAR 转换成 NUMBER 类型
PL/SQL 的自动转换 :
1) 字符型和数字型
2) 字符型和日期型
8. PL/SQL 基本程序控制结构 :
1. 条件结构 :
IF 逻辑结构 (3 种表达式 )
1)IF-THEN
语法结构 :
IF boolean_expression THEN
Run_experssion;
ENDIF;
2)IF-THEN-ELSE
语法格式 :
IF boolean_expression THEN
Run_expression;
ELSE
Run_expression2;
ENDIF;
3)IF-THEN-ELSIF-THEN-ELSE
语法格式 :
IF boolean_expression1 THEN
Run_expression1;
ELSIF boolean_expression2 THEN
Run_expression2;
ELSE
Run_expression3;
ENDIF;
2. 循环结构
1.LOOP – EXIT –END 循环
语法格式 :
LOOP
Run_expression ;
IF boolean_expression THEN
EXIT;
ENDIF;
END LOOP;
2.LOOP – EXIT-WHEN-END
语法格式 :
LOOP
Run_expression
EXIT WHEN boolean_expression
ENDLOOP
3.WHILE-LOOP-END
语法格式 :
WHILE boolean_expression
LOOP
Run_expression
END LOOP
4.FOR – IN –LOOP – END
语法格式 :
FOR count IN count_1 ..count_n
LOOP
Run_expression
END LOOP
说明 :
Count 是循环变量 ,IN 确定循环变量的初始值 count_1 和终值 count_n, 在循环变量之间的范围之间的是分隔符
1. PL/SQL 是 SQL 语言存储过程的扩展 , 包括两部分 : 一部是数据库引擎部分 , 另一部分是可嵌入到其他许多产品 (C,JAVA) 工具中的独立引擎 . 可将这两部分称为数据库 PL/SQL 和工具 PL/SQL. 以下介绍的是数据库 PL/SQL
2. PL/SQL 语言由以下几部分组成 :
1) 数据库定义语言 (DDL). 用于执行数据库中的任务 , 对数据库以及数据库中的各种对象进行创建 . 删除 , 修改 .
命令
功能说明
ALTER PROCEDURE
重新编译存储过程
ALTER TABLE
修改表
ANALYZE
收集数据库对象性能统计资料
ALTER TABLE AND CONSTRAINT
在已有表上增加约束
CTREATE TABLE
创建表
CREATE INDEX
创建索引
DROP TABLE
删除表
DROP INDEX
删除索引
2) 数据操纵语言 (DML). 用于操纵数据库中各种对象 , 检索 , 或修改数据 . 在使用 DML 前 , 必须获得相应的权限 .
命令
功能说明
SELECT
查询数据库
INSERT
插入一行记录
UPDATE
修改数据库记录
DELETE
从表中删除数据
3) 数据控制语言 (DCL) 用于安全管理 , 确定哪些用户可以查看或修改数据库中的数据 ,DCL 包括的主要语句及其功能如下 :
命令
功能说明
GRANT
将用户或角色授与用户和角色
REVOKE
从用户或角色收回权限
PL/SQL 是面向过程的程序结构 , 包括以下几点 :
1) 变量和类型
2) 控制语句
3) 过程和函数
4) 对象类型和方法
3. PL/SQL 结构 :
DECLARE
/** 变量声明 **/
BEGIN
Statements
Exceptions
END
其中变量声明和异常是可选的 .
4. PL/SQL 标识符 : 所有的大小写英文字母 , 数字 0-9, 常用符号 ( 无 ”-“), 最大标识符为 30 个字符
5. PL/SQL 运算符 : 算术运算符 {+,-,*, / ,**( 指数 ),||( 连接 )}, 关系运算符 { 常用比较运算符 ,BETWEEN AND ,IN ,LIKE,IS NULL}; 逻辑运算符 {AND , OR ,NOT}
6. 其他符号
符号
意义
样例
( )
列表分隔
(‘john’,’rose’)
;
语句结束
Procedure_name(arg1,arg2)
.
项分离
Select * from account.table
‘
字符串定界符
If var1=’a+1’
:=
赋值
a:=a+1
||
并置
Fullname:=’a’||’b’
--
注释符
--this is a comment
/* */
注释定界符
/*this too is a comment*/
7. PL/SQL 变量 : 变量的类型可以是 PL/SQL 中的 , 也可以是自定义的 .
变量的定义 :< 变量名 >< 数据类型 >[( 宽度 ):=< 初始值 >]
如 :count varchar2(20):=’1’;
变量的属性包括变量名和数据类型
%TYPE 属性提供了变量和数据列的数据类型 .
如 :my_xh XS.XH%TYPE 表示变量 my_xh 和字段 XH 拥有相同的数据类型 .
使用 %TYPE 有两个优点 :
1) 不必知道 XH 列的确切数据类型
2) 如果改变了 XH 的列定义 ,my_xh 的数据类型在运行时可自动修改 .
%ROWTYPE 用于声明表的行记录 . 对用户自定义的域 . 记录包含唯一的命名域 , 具有不同的数据类型 .
DECLARE
TYPE TimeRec is RECORD (HH number(2),MM number(2));
TYPE MeetingTyp is RECORD
(
Meeting_Date date,
Meeting_Time TimeRec,-- 嵌套变量
Meeting_Addr varchar2(20),
Meeting_Purpose varchar2(50)
)
DECLARE
cj_rec XS_KC%ROWTYPE
引用
my_xh := cj_rec.xh;
如果使用了游标提取 XH,KCH,CJ,XF 则可以使用 %ROWTYPE 声明一个记录保存相同的信息 .
DECLARE
CURSOR
IS
SELECT XH,KCH,CJ
FROM XS_KC
Cj_rec c1%ROWTYPE;
当执行下面的语句时
FETCH c1 INTO cj_rec;
在 XS_KC 表的 XH 列的值就是赋于 cj_rec 的 XH 域
变量的作用域 : 位于 BEGIN END 之间
PL/SQL 常量定义 :
< 常量名 >CONSTANT< 数据类型 >:=< 值 >
PL/SQL 常用数据类型 :
VARCHAR 类型
NUMBER 类型
DATE 类型
BOOLEAN 类型
* 用户自定义数据类型
语法格式 :
TYPE typename IS system_data_type
Typename 是用户自定义的数据类型名称 ,system_date_type 是自定义类型依赖的基类型
定义一个记录类型
TYPE xs_rec IS RECORD
{
Xh number(2) not null:=1;
Xm char(8)
}
数据类型转换 :
1) TO_CHAR( 将 NUMBER,DATE 转换成 VARCHAR2 类型 )
2) TO_DATE( 将 CHAR 转换成 DATE 类型 )
3) TO_NUMBER: 将 CHAR 转换成 NUMBER 类型
PL/SQL 的自动转换 :
1) 字符型和数字型
2) 字符型和日期型
8. PL/SQL 基本程序控制结构 :
1. 条件结构 :
IF 逻辑结构 (3 种表达式 )
1)IF-THEN
语法结构 :
IF boolean_expression THEN
Run_experssion;
ENDIF;
2)IF-THEN-ELSE
语法格式 :
IF boolean_expression THEN
Run_expression;
ELSE
Run_expression2;
ENDIF;
3)IF-THEN-ELSIF-THEN-ELSE
语法格式 :
IF boolean_expression1 THEN
Run_expression1;
ELSIF boolean_expression2 THEN
Run_expression2;
ELSE
Run_expression3;
ENDIF;
2. 循环结构
1.LOOP – EXIT –END 循环
语法格式 :
LOOP
Run_expression ;
IF boolean_expression THEN
EXIT;
ENDIF;
END LOOP;
2.LOOP – EXIT-WHEN-END
语法格式 :
LOOP
Run_expression
EXIT WHEN boolean_expression
ENDLOOP
3.WHILE-LOOP-END
语法格式 :
WHILE boolean_expression
LOOP
Run_expression
END LOOP
4.FOR – IN –LOOP – END
语法格式 :
FOR count IN count_1 ..count_n
LOOP
Run_expression
END LOOP
说明 :
Count 是循环变量 ,IN 确定循环变量的初始值 count_1 和终值 count_n, 在循环变量之间的范围之间的是分隔符