创建和管理程序包
可以创建和管理 PL/SQL 程序包。
另请参阅:“教程:在子程序中声明变量和常量”,其中显示了如何更改程序包主体
关于程序包结构
程序包始终具有一个规范,并且它通常具有一个主体。该规范定义了软件包本身,并且是一个应用程序接口 (application program interface,API)。正文定义已声明游标的查询,以及程序包规范中声明的子程序的代码。
数据包规范对程序包进行定义,同时声明可从程序包外部引用的类型、变量、常量、异常错误、声明的游标和子程序。程序包规范是一个应用程序编程接口 (API) :它提供了客户机程序调用其子程序所需的各种信息,但未提供有关其实施的信息。
数据包主体分别为在数据包规范中声明的已声明的游标和子程序的代码定义(因此,既没有已声明的游标也不会有子程序的数据包不需要主体)。程序包体还可以定义本地子程序,本地子程序不在规范中声明,并且只能由程序包中的其他子程序调用。程序包体的内容对客户机程序是隐藏的。您可以更改程序包体而不会导致调用该程序包的应用程序失效。
另请参见:
-
Oracle Database PL/SQL Language Reference(了解有关程序包规范的详细信息)
-
Oracle Database PL/SQL Language Reference(了解有关程序包体的详细信息)
教程:创建程序包规范
本教程介绍如何使用“创建程序包”工具为一个名 EMP_EVAL 的程序包创建规范,该规范出现在本文档中的许多教程和示例中。
要创建程序包规范,请使用 SQL Developer 的“创建程序包”工具或 DDL 语句 CREATE PACKAGE。
使用“创建程序包”工具创建程序包规范的步骤:
-
在 "Connections"(连接)框架中,展开 hr_conn 。
-
在方案对象类型的列表中,右键单击程序包。
-
在选项列表中,单击新建程序包。
此时将打开“创建程序包”窗口。“方案”字段的值为 HR,“名称”字段使用默认值 PACKAGE1,并且“以小写形式添加新源”复选框处于取消选中状态。
-
对于“方案”,请接受默认值 HR。
-
对于“名称”,将值 PACKAGE1 更改为
EMP_EVAL。 -
单击 "OK"(确定)。
此时将打开 EMP_EVAL 窗格,其中显示创建该程序包的 CREATE PACKAGE 语句:
CREATE OR REPLACE PACKAGE emp_eval AS /* TODO enter package declarations (types, exceptions, methods etc) here */ END emp_eval;该窗格的标题字体为斜体,这表明该程序包尚未保存在数据库中。
-
(可选)在 CREATE PACKAGE 语句中,将注释替换为声明。
如果您此时不执行此步骤,则可以在以后执行,如“教程:更改程序包规范”中所述。
-
从“文件”菜单,选择保存。
Oracle 数据库将会编译并保存此程序包。此时 EMP_EVAL 窗格的标题字体将不再是斜体。
另请参阅: Oracle Database PL/SQL Language Reference,了解有关 CREATE PACKAGE 语句的信息(适用于程序包规范)
教程:更改程序包规范
本教程演示如何使用“编辑”工具更改 EMP_EVAL 程序包的规范,该程序包出现在本文档的许多教程和示例中。具体来说,本教程介绍如何为过程 EVAL_DEPARTMENT 和函数 CALCULATE_SCORE 添加声明。
要更改程序包规范,请使用 SQL Developer 的“编辑”工具,或者使用带有 OR REPLACE 子句的 DDL 语句 CREATE PACKAGE。
使用“编辑”工具更改 EMP_EVAL 程序包规范的步骤:
-
在 "Connections"(连接)框架中,展开 hr_conn 。
-
在方案对象类型的列表中,展开程序包。
-
在软件包列表中,右键单击 EMP_EVAL 。
-
在选项列表中,单击编辑。
此时将打开 EMP_EVAL 窗格,其中显示创建该程序包的 CREATE PACKAGE 语句:
CREATE OR REPLACE PACKAGE emp_eval AS /* TODO enter package declarations (types, exceptions, methods etc) here */ END emp_eval;该窗格的标题字体不是斜体,这表明该程序包已保存在数据库中。
-
在 EMP_EVAL 窗格,将注释替换为以下代码:
PROCEDURE eval_department ( dept_id IN NUMBER ); FUNCTION calculate_score ( evaluation_id IN NUMBER , performance_id IN NUMBER) RETURN NUMBER;EMP_EVAL 窗格的标题将更改为斜体字体,表示所做的更改尚未保存到数据库中。
-
单击图标 Compile 。
随即会编译更改后的程序包规范,并将其保存到数据库中。此时 EMP_EVAL 窗格的标题字体将不再是斜体。
另请参阅: Oracle Database PL/SQL Language Reference,了解有关包含 OR REPLACE 子句的 CREATE PACKAGE 语句的信息
教程:创建程序包体
此教程演示如何使用“Create Body(创建正文)”工具为 EMP_EVAL 程序包创建正文,该程序包出现在本文档中的许多示例和教程中。
要创建程序包体,请使用 SQL Developer 的“创建主体”工具,或者用 DDL 语句 CREATE PACKAGE BODY。
使用“创建主体”工具为程序包 EMP_EVAL 创建主体,步骤:
-
在 "Connections"(连接)框架中,展开 hr_conn 。
-
在方案对象类型的列表中,展开程序包。
-
在软件包列表中,右键单击 EMP_EVAL 。
-
在选项列表中,单击创建正文。
即会出现“EMP_EVAL 主体”窗格,其中显示自动为此程序包体生成的代码:
CREATE OR REPLACE PACKAGE BODY EMP_EVAL AS PROCEDURE eval_department(dept_id IN NUMBER) AS BEGIN -- TODO implementation required for PROCEDURE EMP_EVAL.eval_department NULL; END eval_department; FUNCTION calculate_score ( evaluation_id IN NUMBER , performance_id IN NUMBER) RETURN NUMBER AS BEGIN -- TODO implementation required for FUNCTION EMP_EVAL.calculate_score RETURN NULL; END calculate_score; END EMP_EVAL;该窗格的标题字体为斜体,这表明该代码尚未保存在数据库中。
-
(可选)在 CREATE PACKAGE BODY 语句中:
-
将注释替换为可执行语句。
-
(可选)在过程的可执行部分中,删除 NULL 或将其替换为可执行语句。
-
(可选)在函数的可执行部分中,将 NULL 替换为其他表达式。
如果您此时不完成此步骤,则可以在以后执行,如“教程:在子程序中创建变量和常量”中所述”。
-
-
单击图标 Compile 。
随即会编译更改后的程序包体,并将其保存到数据库中。此时“EMP_EVAL 主体”窗格的标题字体将不再是斜体的。
另请参阅: Oracle Database PL/SQL Language Reference,了解有关 CREATE PACKAGE BODY 语句(适用于程序包主体)的信息
删除程序包
要删除程序包(规范和主体),请使用 SQL Developer Connections 框架和删除工具,或使用 DDL 语句 DROP PACKAGE。
注意:请勿删除 EMP_EVAL 程序包,因为后面的教程需要该程序包。如果您要练习删除程序包,请创建一些简单表,然后删除它们。
使用“删除”工具删除程序包的步骤:
-
在 "Connections"(连接)框架中,展开 hr_conn 。
-
在方案对象类型的列表中,展开程序包。
即会出现程序包列表。
-
在程序包列表中,右键单击要删除的程序包的名称。
-
在选项列表中,单击放置程序包。
-
在 "Drop" 窗口中,单击 Apply 。
-
在“确认”窗口中,单击确定。
另请参阅: Oracle Database PL/SQL Language Reference 以了解有关 DROP PACKAGE 语句的信息