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
沒有留言:
張貼留言