好得很程序员自学网

<tfoot draggable='sEl'></tfoot>

Oracle PL / SQL变量范围

变量范围指的是当另一个PL / SQL块可以看到声明的项目时。

在函数或过程的声明部分中声明的任何项只在同一函数或过程中可见。

在包主体的声明部分中声明的任何项只在同一包主体中的任何其他项内可见。

在包规范中声明的任何项目对于调用方法的所有者具有执行特权的任何其他存储函数,存储过程和包是可见的。

 

实施例2

以下代码是测试范围的程序包规范。

 create or replace package SCOPE as 
    -- global variable declaration -- from  w w w . j  a  v a2 s .c  o m
    gv_scope varchar2(80) := 'I''m a global (or package spec) variable'; 
    
    -- a package function declaration 
    FUNCTION my_scope_is_global return varchar2; 

    -- a package procedure declaration 
    PROCEDURE my_scope_is_global; 

end SCOPE; 
/  

以下代码是用于测试范围的包体。

 
create or replace package SCOPE as 
    -- global variable declaration -- www .j  a  va  2 s  .  c om
    gv_scope varchar2(80) := 'I''m a global (or package spec) variable'; 
    
    -- a package function declaration 
    FUNCTION my_scope_is_global return varchar2; 

    -- a package procedure declaration 
    PROCEDURE my_scope_is_global; 

end SCOPE; 
/ 

create or replace package body SCOPE as 
    -- an package body variable declaration 
    iv_scope varchar2(80) := 'a package body variable'; 
    
    -- package body function declaration 
    FUNCTION my_scope_is_instance return varchar2 is 
        v_answer_1 varchar2(3) := 'Yes'; 
    begin 
        SYS.DBMS_OUTPUT.put_line(chr(9)||'in function'); 
        SYS.DBMS_OUTPUT.put_line(chr(9)||gv_scope); 
        return v_answer_1; 
    end my_scope_is_instance; 

    -- package function declaration 
    FUNCTION my_scope_is_global 
    return varchar2 is 
        v_answer_2 varchar2(3) := 'Yes'; 
    begin 
        SYS.DBMS_OUTPUT.put_line(chr(9)||'procedure'); 
        SYS.DBMS_OUTPUT.put_line(chr(9)||iv_scope); 
        return v_answer_2; 
    end my_scope_is_global; 


    -- package body procedure declaration 
    PROCEDURE my_scope_is_instance is 
        v_answer_3 varchar2(3) := 'Yes'; 
    begin 
        SYS.DBMS_OUTPUT.put_line(chr(9)||'my_scope_is_instance'); 
        SYS.DBMS_OUTPUT.put_line(chr(9)||gv_scope); 
        SYS.DBMS_OUTPUT.put_line(v_answer_3); 
    end my_scope_is_instance; 


    -- package procedure declaration 
    PROCEDURE my_scope_is_global is 
        v_answer_4 varchar2(3) := 'Yes'; 
    begin 
        SYS.DBMS_OUTPUT.put_line(chr(9)||'my_scope_is_global'); 
        SYS.DBMS_OUTPUT.put_line(chr(9)||iv_scope); 
        SYS.DBMS_OUTPUT.put_line(v_answer_4); 
    end my_scope_is_global; 
end SCOPE; 
/  

以下代码显示如何使用软件包SCOPE。

 declare -- from  ww w  . j av  a 2  s . c  o  m
    v_scope varchar2(40) := 'a local variable'; 
    -- This is a local (or embedded) function 
    FUNCTION my_scope_is_local 
    return varchar2 is 
        v_answer_0 varchar2(3) := 'Yes'; 
    begin 
        return v_answer_0; 
    end my_scope_is_local; 

    -- This is a local (or embedded) procedure 
    PROCEDURE my_scope_is_local is 
        v_answer varchar2(3) := 'Yes'; 
    begin 
        SYS.DBMS_OUTPUT.put_line(v_answer); 
    end my_scope_is_local; 

begin 
    SYS.DBMS_OUTPUT.put_line(v_scope); 
    SYS.DBMS_OUTPUT.put_line('Can I access SCOPE'' global variable?'); 
    SYS.DBMS_OUTPUT.put_line(SCOPE.gv_scope); 
    SYS.DBMS_OUTPUT.put_line('Can I access SCOPE'' instance variable?'); 
    
    SYS.DBMS_OUTPUT.put_line(my_scope_is_local()); 
    SYS.DBMS_OUTPUT.put_line('Can I access SCOPE'' global function?'); 
    SYS.DBMS_OUTPUT.put_line(SCOPE.my_scope_is_global()); 
    SYS.DBMS_OUTPUT.put_line('Can I access SCOPE'' instance function?'); 
    
    SYS.DBMS_OUTPUT.put_line('Can I access my local procedure?'); 
    my_scope_is_local(); 
    SYS.DBMS_OUTPUT.put_line('Can I access SCOPE'' global procedure?'); 
    SCOPE.my_scope_is_global(); 
    SYS.DBMS_OUTPUT.put_line('Can I access SCOPE'' instance procedure?'); 
end; 
/  

查看更多关于Oracle PL / SQL变量范围的详细内容...

  阅读:26次

上一篇

下一篇

第1节:Oracle PL / SQL CASE 语句    第2节:Oracle PL / SQL CHAR VARCHAR2    第3节:Oracle PL / SQL INTERVAL数据类型    第4节:Oracle PL / SQL loop循环    第5节:Oracle PL / SQL for loop循环    第6节:Oracle PL / SQL goto 语句    第7节:Oracle PL / SQL update更新数据    第8节:Oracle PL / SQL包    第9节:Oracle PL / SQL 存储过程    第10节:Oracle PL / SQL 函数    第11节:Oracle PL / SQL变量    第12节:Oracle PL / SQL变量范围    第13节:Oracle PL / SQL TIMESTAMP数据类型    第14节:Oracle PL / SQL 聚合函数大全    第15节:Oracle PL/SQL Views 视图    第16节:Oracle PL / SQL 表 table    第17节:Oracle PL/SQL Delete删除数据    第18节:Oracle PL/SQL Select 查询    第19节:Oracle PL/SQL 教程    第20节:Oracle PL / SQL注释    第21节:Oracle PL / SQL触发器Triggers    第22节:Oracle PL / SQL变量值    第23节:Oracle PL / SQL块结构    第24节:Oracle PL / SQL关联数组    第25节:Oracle PL / SQL文字    第26节:Oracle PL / SQL参数    第27节:Oracle PL / SQL运算符    第28节:Oracle PL/SQL NUMBER    第29节:Oracle PL/SQL if 语句    第30节:Oracle PL/SQL while循环    第31节:Oracle PL / SQL约束    第32节:Oracle PL / SQL 插入insert    第33节:Oracle PL / SQL数据类型    第34节:PL / SQL 分析函数大全