zoukankan      html  css  js  c++  java
  • 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

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

  • 相关阅读:
    【zz】编程修养(一二三)
    Lec1计算字符串的相似度
    ASP.NETFLV处理流代码
    获取指定文件夹下所有子目录及文件(树形)
    Flex及AS3的百条常用知识(转载)
    [AS3] 解决跨域问题
    Asp.Net 文件操作基类(读取,删除,批量拷贝,删除,写入,获取文件夹大小,文件属性,遍历目录)
    ASP.NET中的File类和Directory类的相关知识
    Asp.net 备份、还原Ms SQLServer及压缩Access数据库
    http://blog.csdn.net/octverve/archive/2008/01/29/2071356.aspx
  • 原文地址:https://www.cnblogs.com/JSD1207ZX/p/9386332.html
Copyright © 2011-2022 走看看