Oracle PL/SQL Tutorial/PL SQL Data Types/Variable Scope

Материал из SQL эксперт
Перейти к: навигация, поиск

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>