变量范围指的是当另一个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变量范围的详细内容...
声明:本文来自网络,不代表【好得很程序员自学网】立场,转载请注明出处:http://www.haodehen.cn/did225670