Oracle Package中的包变量的使用

 在Oracle中,可以定义包变量。

      关于包变量的使用,不少的人不是很清楚。首先我们看如下的例子:

      CREATE OR REPLACE PACKAGE ds_test AS
          procedure proc1;
      END ds_test;
      /

      CREATE OR REPLACE PACKAGE BODY ds_test AS
       n number:=0;
       procedure proc1
       is
       begin
         n:=n+1;
          dbms_output.put_line('n='||n);
       end proc1;

      END ds_test;
    /

      执行如下的脚本,其输出的结果是什么呢?

      BEGIN 
        DS_TEST.PROC1;
  
        DS_TEST.PROC1;
  
        DS_TEST.PROC1;
  
        DS_TEST.PROC1;
      END;

      呵呵执行结果是:

      n=1
      n=2
      n=3
      n=4

    这说明什么问题呢,这也就是说ORACLE中的Package酒相当于我们java中的一个class,在运行的时候被实例化,因此其中包变量就像是该实例中的实例变量一样。在Oracle中对包一个会话调用中,包变量是该会话中的“全局”变量。

     当然,在Oracle Package中,也可以定义包过程,其中很简单。比如将入行的包体修改一下:

       CREATE OR REPLACE PACKAGE BODY ds_test AS
       n number:=0;
       procedure proc1
       is
       begin
         n:=n+1;
          dbms_output.put_line('n='||n);
       end proc1;

       begin

            n:=n+100;

      END ds_test;
     /

      那么执行上述脚本后的结果是什么?

      执行后的结果是:

      n=101
      n=102
      n=103

      n=104

      由此可见,包过程是在一个会话中第一次调用时被执行,而在该会话中其他以后的调用中则不再被调用!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值