本文共 1141 字,大约阅读时间需要 3 分钟。
包可将一些有联系的对象放在其内部。任何能在块定义部分出现的对象都可以在包中出现。这些对象包括储存过程,函数,游标,自定义类型(例如PLSQL表和记录)和变量。我们在其他的PLSQL块中引用包中的这些对象,也就是说,包为PLSQL提供了全局变量.
一不包由两个独立部分组成---包头和包体。
定义一个包,要分别定义包头和包体。
eg
CREATE OR REPLACE PACKAGE AuthsPack AS
PROCEDURE QuerySalary
(
p_code auths.author_code%TYPE,
P_sALARY OUT auths.salary%TYPE
);
PROCEDURE InsertAuthor
(
p_Code auths.author_code%TYPE,
p_Name auths.name%TYPE,
p_Sex auths.sex%TYPE,
p_Birthdate auths.birthdate%TYPE,
p_entry_date_time auths.entry_datetime%TYPE
);
END AuthsPack;
AuthsPack包中有两个存储过程,QueueSalary用来查询指定作家的工资,InsertAuthor用来向AUTHS表插入记录.
定义包体:
CREATE OR REPLACE PACKAGE BODY AuthsPack IS
PROCEDURE QuerySalary(
p_code auths.author_code%TYPE,
p_Salary OUT auths.salary%TYPE
)
AS
BEGIN
SELECT salary into p_Salary FROM auths WHERE author_code = p_code;
END QuerySalary;
PROCEDURE InsertAuthor
(
p_Code auths.author_code%TYPE,
p_Name auths.name%TYPE,
p_Sex auths.sex%TYPE,
p_Birthday auths.birthday%TYPE,
p_entry_date_time auths.entry_date_time%TYPE
)
AS
BEGIN
INSERT INTO ...;
END InsertAuthor;
END AuthsPack;
在包中定义的任意对象都可以在保外使用,只是在引用该对象前用包名做前缀。
在包的内部,存储过程和函数可被重载,这意味着有多个储存过程或函数可以使用同一个名称,但是参数不能相同。这样允许不同的参数调用同意个名字的过程或函数.
转载地址:http://qjlmi.baihongyu.com/