程序包有两个独立的部分:说明部分和包体部分
说明部分是包与应用程序之间的接口,只是过程。函数。游标等的名称或部首
包体部分是过程,函数,游标等的具体实现
创建包:
包头是对包的所有部件进行一个声明,其中的过程函数变量常量游标都是公共的,可在应用程序执行过程中调用。
1.包说明部分:
CREATE PACKAGE<包说明>
IS
变量,常量及数据类型定义;
游标定义头部;
函数,过程的定义和参数列表以及返回类型;
END <包名>;
ex;
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 PACKAGE P_count_num
(in_sex in TEACHERS.SEX%TYPE,out_num out NUMBER); ----定义了一个过程
END my_package;
2.包体部分
CREATE PACKAGE BODY<包名>
AS
游标。函数。过程的具体定义;
END <包名>;
ex;
CREATE PACKAGE BODY my_package
AS
CURSOR teacher_cus 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=‘m’ THEN
SELECT count(SEX)INTO out_num
FROM TEACHERS
WHERE SEX=‘m’;
ELSE
SELECT count(SEX) INTO out_num
FROM TEACHERS
WHERE SEX=‘f’;
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=‘m’ THEN
SELECT count(SEX) INTO out_num
FROM TEACHERS
WHERE SEX=‘m’;
ELSE
SELECT count(SEX) INTO out_num
FROM TEACHERS
WHERE SEX=‘f’;
END IF ;
END P_count_num;
END my_package;
如果包体的过程或函数定义中有变量声明,则包外不能使用这些私有变量
3.调用包
包名.变量名(常量名)
包名.游标名
包名.函数名(过程名)
4.删除包
DROP PACKAGE <包名>
5.修改
CREATE OR REPLACE PACKAGE <包名>