作者:mR_woManh | 来源:互联网 | 2014-07-08 01:11
oracle数据库PL/SQL之包六)程序包www.2cto.com1.基本概念程序包简称包,用于将逻辑相关的PL/SQL块或元素(变量、常量、自定义数据类型、异常、过程、函数、游标)等组织在一起,作为一个完整的单元...SyntaxHighlighter.all();
六)程序包 www.2cto.com
1.基本概念
程序包简称包,用于将逻辑相关的PL/SQL块或元素(变量、常量、自定义数据类型、异常、过程、函数、游标)等组织在一起,作为一个完整的单元存储在数据库中,用名称来标示程序包。
程序包分两个独立的部分:说明部分和包体部分,这两部分独立的存储在数据字典中。包的说明部分的更改需要重新编译调用的应用程序,包体部分的更改不需要重新编译调用的应用程序。
2.创建包
1)创建一个包说明部分。
CREATE PACKAG<包名>
IS
变量、常量及数据类型定义;
游标定义头部;
函数、过程的定义和参数列表以及返回类型;
END<包名>;
CREATE PACKAGE my_package
IS
man_num NUMBER; --定义了两个全局变量
woman_num NUMBER;
CURSOR teacher_cur; --定义了一个游标
CREATE FUNCTION F_count_num(in_sex in TEACHERS.SEX%TYPE)
RETURN NUMBER; --定义了一个函数
CREATE PROCEDURE P_count_num
(in_sex in TEACHERS.SEX%TYPE,out_num out NUMBER); --定义了一个过程
END my package;
2)对应的包体
CREATE PACKAGE BODY <包名>
AS
游标、函数、过程的具体定义;
END<包名>;
CREATE PACKAGE BODY my_package
AS
CURSOR teacher_cur IS --游标具体定义
SELECT TID , TNAME , TITLE , SEX
FROM TEACHERS
WHERE TID<117;
FUNCTION F_count_num --函数具体定义
(in_Sex in TEACHERS.SEX%TYPE)
RETURN NUMBER
AS
out_num NUMBER;
BEGIN
IF in_sex=&#39;m&#39; THEN
SELECT count(SEX)INTO out_num
FROM TEACHERS
WHERE SEX=&#39;m&#39;;
ELSE
SELECT count(SEX)INTO out_num
FROM TEACHERS
WHERE SEX=&#39;f&#39;;
END IF;
RETURN(out_num);
END F_count_num;
PROCEDURE P_count_num --过程具体定义
(in_sex in TEACHERS.SEX%TYPE, out_num out NUMBER)
AS
BEGIN
IF in_sex=&#39;m&#39; THEN
SELECT count(SEX) INTO out_num
FROM TEACHERS
WHERE SEX=&#39;m&#39;;
ELSE
SELECT count(SEX) INTO out_num
FROM TEACHERS
WHERE SEX=&#39;f&#39;;
END IF;
END P_count_num;
END my_package; --包体定义结束
3.调用包
包名.变量名(常量名)
包名.游标名
包名.函数名(过程名)
SQL>VARIABLE man_num NUMBER
SQL>EXECUTE man_num:=my_package.F_count_num(&#39;M&#39;)
4.删除包
DROP PACKAGE my_package