AdSense

網頁

2024/11/18

PL/SQL 巢狀區塊

PL/SQL 巢狀區塊(Nested Block)與變數存取範圍。


下面為兩個匿名區塊形成的巢狀區塊範例,內區塊(Inner Block)嵌套於外區塊(Outer Block)。

外區塊和內區塊可宣告各自的本地變數。

內區塊可存取外區塊的變數,反之則否。

內區塊變數和外區塊變數名稱相同時,則內區塊存取自身的變數。

DECLARE
  v_name VARCHAR2(30);
  v_age NUMBER;
BEGIN
  v_name := 'John';
  v_age := 33;
  
  DECLARE
    v_name VARCHAR2(30);
  BEGIN
    v_name := 'Mary';
    DBMS_OUTPUT.PUT_LINE(v_name || ' ' || v_age );
  END;
  DBMS_OUTPUT.PUT_LINE(v_name || ' ' || v_age );
  
END;

執行印出以下。

Mary 33
John 33


區塊標籤 Block Label

可以在區塊上方以<<label>>賦予區塊名稱,而內區塊可以標籤名稱存取外區塊的變數,以方便區別相同名稱的變數。

<<outer>>
DECLARE
  v_name VARCHAR2(30);
  v_age NUMBER;
BEGIN
  v_name := 'John';
  v_age := 33;
  
  <<inner>>
  DECLARE
    v_name VARCHAR2(30);
  BEGIN
    v_name := 'Mary';
    DBMS_OUTPUT.PUT_LINE(outer.v_name || ' ' || v_age ); -- use "outer" to refer to outer block's variable
  END inner;
  DBMS_OUTPUT.PUT_LINE(v_name || ' ' || v_age );
  
END outer;


John 33
John 33


沒有留言:

AdSense