使用plsqldev打开测试窗口,输入如下:

-- Created on 2018/3/21 by E.WANG 
declare
/*
全局变量
初始化变量
*/
userName char(10) default 'ewang';
age int:=33;
address varchar2(50);
begin
-- Test statements here
address:='shang hai pudong';
dbms_output.put_line('-----------------alter before--------------------' );
dbms_output.put_line('user name:' || userName);
dbms_output.put_line('user age:' || age);
dbms_output.put_line('user address:' || address);


declare
englishName char(10);
sex varchar(6);
mount decimal;
begin
--修改全局变量的值
userName:='wang shang';
age:=18;
--给局部变量赋值
englishName:='ewang';
sex:='male';
mount:=6523.56;
dbms_output.put_line('-----------------alter after(local)--------------------' );
dbms_output.put_line('user name:' || userName);
dbms_output.put_line('user sex:' || sex);
dbms_output.put_line('user age:' || age);
dbms_output.put_line('user englishName:' || englishName);
dbms_output.put_line('user mount:' || mount);
dbms_output.put_line('user address:' || address);
end;
--修改全局变量的值
userName:='wang ning';
age:=14;
/*
--给局部变量赋值
englishName:='sunny';
sex:='female';
mount:=6666.66;
*/
dbms_output.put_line('-----------------alter after(global)--------------------' );
dbms_output.put_line('user name:' || userName);
--dbms_output.put_line('user sex:' || sex);
dbms_output.put_line('user age:' || age);
--dbms_output.put_line('user englishName:' || englishName);
--dbms_output.put_line('user mount:' || mount);
dbms_output.put_line('user address:' || address);

end;

给出部分代码截图:

PL/SQL变量声明、使用、作用域讲解实例_局部变量和全局变量

在没有注释掉上图那部分代码,运行会弹出如下错误:

PL/SQL变量声明、使用、作用域讲解实例_PL/SQL变量作用域_02

注释掉之后,运行截图:

PL/SQL变量声明、使用、作用域讲解实例_PL/SQL变量作用域_03


总结:

begin中嵌套的那部分变量声明,作用域就是在变量声明的那个begin中有效,而在最外部的声明在整个部分都有效!