创建包体¶
语法:
说明:
包头和包体必须有相同的名字;
包的开始没有BEGIN语句,这与存储过程和函数不同;
在包头中定义函数和过程的名称及其参数,而它们的具体实现在包体中定义;
在包内声明常量、变量、异常、及游标时不使用DECLARE;
包内的过程和函数的定义不使用CREATE OR REPLACE语句;
包头和包体两者分离。
注解
创建包体之前必须创建包头,而且包头中声明的子程序在包体中必须有定义。 包体中私有变量不可以和包头中公有变量重名,而且包体中的声明语句必须在定义语句之前,且如果有子程序声明必须有其定义。
示例:创建包体¶
-- 清理环境
DROP TABLE tab CASCADE;
DROP PACKAGE pack;
CREATE TABLE tab
(
a INT,
b VARCHAR(2)
);
INSERT INTO tab VALUES (1,'aa');
CREATE OR REPLACE PACKAGE pack AS
goal CONSTANT VARCHAR(80) := 'package!';
PROCEDURE proc(a INT, b VARCHAR(2));
END pack;
/
CREATE OR REPLACE PACKAGE BODY pack AS
PROCEDURE proc(a INT, b VARCHAR(2)) AS
BEGIN
INSERT INTO tab VALUES(a,b);
END proc;
END pack;
/
EXEC pack.proc(2, 'bb');
select * from tab;
A(int) |B(varchar) |
----------------------------
1 |aa |
----------------------------
2 |bb |
总数目:2
--删除
DROP TABLE tab CASCADE;
DROP PACKAGE pack;