Oracle Package

本文介绍了PL/SQL包的概念及其重要性,包括如何通过创建包来组织过程、函数等,并详细展示了包头与包体的语法结构及示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

包的作用:

        包可以将任何出现在块声明的语句 ( 过程 , 函数 , 游标 , 游标 , 类型 , 变量 ) 放于包中 , 相当于一个容器 . 将声明语句放入包中的好处是 : 用户可以从其他 PL/SQL 块中对其进行引用 , 因此包为 PL/SQL 提供了全程变量 . 

包分为两部分 : 包头和包体 . 

如何创建包

语法格式 : 

        CREATE OR REPLACE PACKAGE package_name /* 包头名称 */ 

         IS|AS pl/sql_package_spec /* 定义过程 , 函数以及返回类型 , 变量 , 常量及数据类型定义 */ 

定义包头应当遵循以下原则 : 

    1) 包元素位置可以任意安排 . 然而在声明部分 , 对象必须在引用前进行声明 . 

     2) 包头可以不对任何类型的元素进行说明 . 例如 , 包头可以只带过程和函数说明语句 , 而不声明任何异常和类型 . 

     3) 对过程和函数的任何声明都必须只对子程序和其参数进行描述 , 不能有任何代码的说明 , 代码的实现只能在包体中出现 . 它不同于块声明 , 在块声明中 , 过程和函数的代码可同时出现在声明部分 . 

语法格式 : 

     CREATE OR REPLACE PACKAGE BODY package_name/* 包名必须与包头的包名一致 */ 

     IS | AS pl/sql_package_body /* 游标 , 函数 , 过程的具体定义 */ 

      包体是与包头相互独立的 , 包体只能在包头完成编译后才能进行编译 . 包体中带有包头中描述的子程序的具体实现的代码段 . 除此之外 , 包体还可以包括具有包体人全句属性的附加声明部分 , 但这些附加声明对于包头是不见的 . 

示例: 

/* Formatted on 2011/09/23 03:09 (Formatter Plus v4.8.8) */

CREATE OR REPLACE PACKAGE package_test

IS

   FUNCTION package_function_test (x IN DATE, y OUT VARCHAR)

      RETURN VARCHAR;

    PROCEDURE package_procedure_test (a IN DATE, b OUT VARCHAR);

END package_test;

 /* Formatted on 2011/09/23 03:09 (Formatter Plus v4.8.8) */

CREATE OR REPLACE PACKAGE BODY package_test

IS

   FUNCTION package_function_test (x IN DATE, y OUT VARCHAR)

      RETURN VARCHAR

   IS

   BEGIN

      SYS.DBMS_OUTPUT.put_line ('package_function_test: ' || x);

      y := 'package_function_test params return';

      RETURN 'package_function_test Function return';

   END package_function_test;

 

   PROCEDURE package_procedure_test (a IN DATE, b OUT VARCHAR)

   AS

   BEGIN

      SYS.DBMS_OUTPUT.put_line ('Package_Procedure_Test: ' || a);

      b := 'Package_Procedure_Test params return';

   END package_procedure_test;

END package_test;

 

declare

outParams varchar(300);

outReturn varchar(300);

begin

 outReturn:=package_test.PACKAGE_FUNCTION_TEST(sysdate,outParams);

 sys.dbms_output.PUT_LINE('PACKAGE_FUNCTION_TEST.outParams: ' ||outParams);

 sys.dbms_output.PUT_LINE('PACKAGE_FUNCTION_TEST.outReturn: ' ||outReturn);

 package_test.PACKAGE_PROCEDURE_TEST(sysdate,outParams);

 sys.dbms_output.PUT_LINE('PACKAGE_PROCEDURE_TEST.outParams: ' ||outParams);

 end;

 

结果演示:

package_function_test: 23-9月 -11

PACKAGE_FUNCTION_TEST.outParams: package_function_test params return

PACKAGE_FUNCTION_TEST.outReturn: package_function_test Function return

Package_Procedure_Test: 23-9月 -11

PACKAGE_PROCEDURE_TEST.outParams: Package_Procedure_Test params return

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值