返回首页

gbase数据、南大通用产品文档:GBase8a| 111111 |

更新日期:2024年09月11日

| 2013-12-17 14:11:16 |

功能描述
创建一个新的PACKAGE。
注意事项

在package specification 中声明过的函数或者存储过程,必须在package body 中找到定
义。

在实例化中,无法调用带有commit/rollback 的存储过程。

不能在Trigger 中调用package 函数。

GBase 8c SQL 参考手册
南大通用数据技术股份有限公司
912

不能在外部SQL 中直接使用package 当中的变量。

不允许在package 外部调用package 的私有变量和存储过程。

不支持其它存储过程不支持的用法,例如,在function 中不允许调用commit/rollback,
则package 的function 中同样无法调用commit/rollback。

不支持schema 与package 同名。

只支持A 风格的存储过程和函数定义。

不支持package 内有同名变量,包括包内同名参数。

package 的全局变量为session 级,不同session 之间package 的变量不共享。

package 中调用自治事务的函数,不允许使用package 中的cursor 变量,以及递归的使
用package 中cursor 变量的函数。

package 中不支持声明refcursor 变量。

package 默认为SECURITY INVOKER 权限,如果想将默认行为改为SECURITY
DEFINER 权限,需要设置guc 参数behavior_compat_options='plsql_security_definer'。

被授予CREATE ANY PACKAGE 权限的用户,可以在public 模式和用户模式下创建
PACKAGE。

如果需要创建带有特殊字符的package 名,特殊字符中不能含有空格,并且最好设置
GUC 参数behavior_compat_options=“skip_insert_gs_source”,否则可能引起报错。
语法格式

CREATE PACKAGE SPECIFICATION 语法格式。
CREATE [ OR REPLACE ] PACKAGE [ schema ] package_name
[ invoker_rights_clause ] { IS | AS } item_list_1 END package_name;
invoker_rights_clause 可以被声明为AUTHID DEFINER 或者AUTHID INVOKER,
分别
为定义者权限和调用者权限。
item_list_1 可以为声明的变量或者存储过程以及函数。

GBase 8c SQL 参考手册
南大通用数据技术股份有限公司
913
PACKAGE SPECIFICATION(包规格)声明了包内的公有变量、函数、异常等,可以被外
部函数或者存储过程调用。在PACKAGE SPECIFICATION 中只能声明存储过程、函数,不
能定义存储过程或者函数。

CREATE PACKAGE BODY 语法格式。
CREATE [ OR REPLACE ] PACKAGE BODY [ schema ] package_name
{ IS | AS } declare_section [ initialize_section ] END package_name;
PACKAGE BODY(包体内)定义了包的私有变量、函数等。如果变量或者函数没有在
PACKAGE SPECIFICATION 中声明过,那么这个变量或者函数则为私有变量或者函数。
PACKAGE BODY 也可以声明实例化部分,用来初始化package。
示例
CREATE PACKAGE SPECIFICATION 示例
CREATE OR REPLACE PACKAGE emp_bonus IS
var1 int:=1;--公有变量
var2 int:=2;
PROCEDURE testpro1(var3 int);--公有存储过程,可以被外部调用
END emp_bonus;
/
CREATE PACKAGE BODY 示例
drop table if exists test1;
create or replace package body emp_bonus is
var3 int:=3;
var4 int:=4;
procedure testpro1(var3 int)
is
begin
create table if not exists test1(col1 int);
insert into test1 values(var1);
insert into test1 values(var5);
end;
begin
--实例化开始
var4:=9;
testpro1(var4);
end emp_bonus;

GBase 8c SQL 参考手册
南大通用数据技术股份有限公司
914
/
ALTER PACKAGE OWNER 示例
--将PACKAGE emp_bonus 的所属者改为gbase
ALTER PACKAGE emp_bonus OWNER TO gbase;
调用PACKAGE 示例
--使用call 调用package 存储过程
call emp_bonus.testpro1(1);
--使用select 调用package 存储过程
select emp_bonus.testpro1(1);
--匿名块里调用package 存储过程
begin
emp_bonus.testpro1(1);
end;
/

按逻辑日志文件的位置中的说明,您可能由于性能原因或为使数据库空间中有更多空间而
希望移动逻辑日志文件。要查明逻辑日志文件的位置,请参阅监视日志记录活动。 虽然移
动逻辑日志文件并不难,但它可能很耗时。
移动逻辑日志文件将由两个较简单的操作组合完成:

从逻辑日志文件当前所在数据库空间删除这些文件

将逻辑日志文件添加到其新数据库空间
以下过程提供如何将 6 个逻辑日志文件从根数据库空间移至另一数据库空间 dbspace_1 的
示例。
限制: 您不能在非缺省页大小的数据库空间中移动逻辑和物理日志文件。
要将逻辑日志文件从根数据库空间移出(示例),请执行以下操作:
1. 请确保数据库服务器处于联机、管理、静默或快速恢复方式中。
2. 向 dbspace_1 添加 6 个新逻辑日志文件。
请参阅手动添加逻辑日志文件。
3. 对所有存储空间进行 0 级备份,以释放除当前日志文件以外的所有日志文件。
(如果使用 onbar -l -b -c,那么可备份包括当前日志文件在内的所有日志文件。)
请参阅释放逻辑日志文件。
4. 使用 onmode -l 切换到新的当前日志文件。
请参阅切换到下一个逻辑日志文件。
5. 删除根数据库空间中的全部 6 个逻辑日志文件。
您不能删除当前逻辑日志文件。
请参阅删除逻辑日志文件。
6. 创建根数据库空间和 dbspace_1 的 0 级备份。
有关更多信息,请参阅《GBase 8s 备份与复原指南》。