zoukankan      html  css  js  c++  java
  • Oracle Package中的包变量的使用(转)

    转自:http://hi.baidu.com/andyloolu/blog/item/a64f0ed12cc10738960a165a.html

     在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

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

     

  • 相关阅读:
    ORA-14404
    ORA-00845
    ORA-00054
    oracle-11g-配置dataguard
    ORACLE 11G 配置DG 报ORA-10458、ORA-01152、ORA-01110
    Python:if __name__ == '__main__'
    HDFS-Shell 文件操作
    HDFS 概述
    PL/SQL Developer
    CentOS7 图形化方式安装 Oracle 18c 单实例
  • 原文地址:https://www.cnblogs.com/millen/p/2299419.html
Copyright © 2011-2022 走看看