变量范围指的是当另一个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;
/
CSDN:程序猿 寄语:
1、作为一个真正的程序员,首先应该尊重编程,热爱你所写下的程序,他是你的伙伴,而不是工具。
2、程序员可以让步,却不可以退缩,可以羞涩,却不可以软弱,总之,程序员必须是勇敢的。
3、编程是一种单调的生活,因此程序员比普通人需要更多的关怀,更多的友情。
4、程序不是年轻的专利,但是,他属于年轻。
5、没有情调,不懂浪漫,也许这是程序员的一面,但拥有朴实无华的爱是他们的另一面。
6、一个好汉三个帮,程序员同样如此。