摘要:
Oracle 中的 package 对象是其他数据库中所不存在的特性之一,这是 oracle 面向对象编程的一种体现.我们可以像定
义面向对象语言的对象一样定义 oracle 的 package.并为 package 定义对应的属性(全局变量)和方法(function,procedure).
package 的全局变量在 oracle 编程过程中有很多有趣并非常实用的作用.比如,我们可以利用这个特性定义带参数的视
图,以增加特定情况下(无法通过普通视图完成数据的筛选过程)程序的可维护性.
本文利用几个测试简单描述 package 的全局变量特性和用法.
Oracle 官方文档中的相关解释:
in the same session ,
the variable declared in the package header will not be reset ( global in the session level )
in different session ( database wise ) , they are not global.
So usually we need to write some reset variable function in the beginning of the package so that we
will not get confused ( in same session)
可以看出, oracle 中 package 的全局变量的全局性是基于 session 级别的.在 session 级别设置,修改,维护全局变量的过程
不会传输到其他的 session 中.
我们可以这样理解,oracle 将 package 封装为一个类.在每个 session 第一次调用时为这个类创立一个实例.而 session 结
束后自动释放实例资源.
对 package 的全局变量特性测试.
第一步,创建包含全局变量的 package.程序包 PKG_TEST.
CREATE OR REPLACE PACKAGE PKG_TEST
IS
PROCEDURE P_1(v1 VARCHAR2,v2 VARCHAR2);
PROCEDURE P_2(v1 VARCHAR2,v2 VARCHAR2);
END;
CREATE OR REPLACE PACKAGE BODY PKG_TEST
IS
G_1 VARCHAR2(20);
G_2 VARCHAR2(20);
PROCEDURE P_1(v1 VARCHAR2,v2 VARCHAR2)
IS
BEGIN
G_1 := v1;
G_2 := v2;
dbms_output.put_line('G1:'||G_1);
dbms_output.put_line('G2:'||G_2);
END;
PROCEDURE P_2(v1 VARCHAR2,v2 VARCHAR2)
IS
BEGIN
G_1 := v1;
G_2 := v2;
dbms_output.put_line('G1:'||G_1);
dbms_output.put_line('G2:'||G_2);
END;
评论1