Oracle PL/SQL Tutorial/PL SQL Data Types/Variable Scope
The scope test script
<source lang="sql">
SQL> SQL> <<a>>
2 declare 3 x char(1) := "a"; 4 y char(1) := "a"; 5 begin 6 dbms_output.put_line("loop a: x = " || x); 7 dbms_output.put_line("loop a: y = " || y); 8 <> 9 declare 10 x char(1) := "b"; 11 begin 12 dbms_output.put_line("loop b: x = " || x); 13 dbms_output.put_line("loop b: a.x = " || a.x); 14 dbms_output.put_line("loop b: y = " || y); 15 dbms_output.put_line("loop b: a.y = " || a.y); 16 end b; 17 end a; 18 /
loop a: x = a loop a: y = a loop b: x = b loop b: a.x = a loop b: y = a loop b: a.y = a PL/SQL procedure successfully completed. SQL> SQL> SQL></source>
Variable scope
<source lang="sql">
SQL> <<l_outer_block>>
2 DECLARE 3 v_visible VARCHAR2(30); 4 v_hidden VARCHAR2(30); 5 BEGIN 6 v_visible := "v_visible in the outer block"; 7 v_hidden := "v_hidden in the outer block"; 8 9 DBMS_OUTPUT.PUT_LINE("*** OUTER BLOCK ***"); 10 DBMS_OUTPUT.PUT_LINE(v_visible); 11 DBMS_OUTPUT.PUT_LINE(v_hidden); 12 DBMS_OUTPUT.PUT_LINE(" "); 13 14 DECLARE 15 v_hidden NUMBER(10); 16 BEGIN 17 DBMS_OUTPUT.PUT_LINE("*** INNER BLOCK ***"); 18 l_outer_block.v_hidden := "v_hidden in the inner block"; 19 DBMS_OUTPUT.PUT_LINE(l_outer_block.v_hidden); 20 EXCEPTION 21 WHEN OTHERS 22 THEN 23 DBMS_OUTPUT.PUT_LINE("v_hidden of type VARCHAR2 was...hidden"); 24 END; 25 END; 26 /
- OUTER BLOCK ***
v_visible in the outer block v_hidden in the outer block
- INNER BLOCK ***
v_hidden in the inner block PL/SQL procedure successfully completed.</source>
Variable visibility
<source lang="sql">
SQL> SQL> SET SERVEROUTPUT ON SQL> SQL> DECLARE
2 v_visible VARCHAR2(30); 3 v_hidden VARCHAR2(30); 4 BEGIN 5 v_visible := "v_visible in the outer block"; 6 v_hidden := "v_hidden in the outer block"; 7 8 DBMS_OUTPUT.PUT_LINE("*** OUTER BLOCK ***"); 9 DBMS_OUTPUT.PUT_LINE(v_visible); 10 DBMS_OUTPUT.PUT_LINE(v_hidden); 11 DBMS_OUTPUT.PUT_LINE(" "); 12 13 DECLARE 14 v_hidden NUMBER(10); 15 BEGIN 16 DBMS_OUTPUT.PUT_LINE("*** INNER BLOCK ***"); 17 v_hidden := "v_hidden in the inner block"; 18 DBMS_OUTPUT.PUT_LINE(v_hidden); 19 EXCEPTION 20 WHEN OTHERS 21 THEN 22 DBMS_OUTPUT.PUT_LINE("v_hidden of type VARCHAR2 was...hidden"); 23 END; 24 END; 25 /
- OUTER BLOCK ***
v_visible in the outer block v_hidden in the outer block
- INNER BLOCK ***
v_hidden of type VARCHAR2 was...hidden PL/SQL procedure successfully completed. SQL></source>