金仓数据库KingbaseES PAKCAGE的使用

什么是包

包是一种数据库对象,相当于一个容器。将逻辑上相关的过程、函数、变量等元素组合成一个更大的单元。

包的组成

包由包头和包体两部分组成。包头中声明的元素是公有对象,对外部可见;包体中声明的元素为该包的私有对象,仅该包可见;包体中自定义所有公有对象和私有对象。

包头中可以声明公有变量、常量、类型、自定义异常、游标和子程序。

包体中可以声明私有变量、常量、类型、自定义异常、游标和子程序。也可以定义上述所有对象,另外,包体中可以定义自己的初始化块,初始化块仅在创建时执行,可以在创建时将包中定义的变量等初始化。

包的优点

1.简化应用设计

包将一个模块的PLSQL程序元素组织到一起,每个包相互独立,便于管理。

2.提高应用性能

包在首次调用时,就整体存入内存,之后的访问都不需要再进行I/O操作。

3.实现信息隐藏

包中分为公有和私有部分,只对外提供公有的接口,私有的内容对外不可见。

4.解决命名冲突

在不同的包中,过程、函数、变量等元素都可以重名,解决了命名冲突问题。

包的使用规则

  1. 包头可以单独存在,但是包体的定义一定要在包头定义之后。
  2. 包体中必须定义所有包头中声明的对象。
  3. 允许创建不包含任何函数或存储过程的包头和包体。
  4. 包体中的私有元素不能被外部直接使用,但可以通过公有子程序间接使用。
  5. 如果更新包头,则必须重新编译包体后才能正常使用;如果仅更改包体,则无需重新编译包头。

包的使用规则场景

1. 单独定义一个包头,正确执行;单独定义一个包体,报错。

--定义包头,创建成功

test=# CREATE OR REPLACE PACKAGE pkg1 AS

test-#     i int;

test-#     PROCEDURE pt1();

test-# END;

test-# /

CREATE PACKAGE 



--定义包体,报错

test=# CREATE OR REPLACE PACKAGE BODY pkg2 AS

test-#     PROCEDURE pt1() AS

test-#     BEGIN

test-#         NULL;

test-#     END;

test-# END;

test-# /

ERROR:  package "pkg2" does not exist

2. 包体中未定义包头中所有声明的对象

--创建一个包头,声明两个存储过程pt1,pt2

test=# CREATE OR REPLACE PACKAGE pkg3 AS

test-#     PROCEDURE pt1();

test-#     PROCEDURE pt2();

test-# END;

test-# /

CREATE PACKAGE



--创建对应的包体,只定义其中一个存储过程pt1。报错提示pt2也必须在包体中定义

test=# CREATE OR REPLACE PACKAGE BODY pkg3 AS

test-#   &n
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值