创建包体

语法:

create_package_body ::=

说明:

包头和包体必须有相同的名字;

包的开始没有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;