본문 바로가기

Database/PLSQL

004 - [Oracle PL/SQL] Variables scope with nested blocks

<샘플코드에서 사용한 데이터는 HR 스키마이고, 오라클 설치시 생성할 수 있는 기본 스키마 입니다>

 

지역번수는 지역을 넘어간 영역에서 접근하면 오류가 발생한다.

 

declare
    v_global varchar2(100):='this is a global variable';
begin
    
    declare
        v_local varchar2(100):='this is a local variable';
    begin
        dbms_output.put_line(v_global);
        dbms_output.put_line(v_local);
    end;
 
    dbms_output.put_line(v_global);
--    dbms_output.put_line(v_local); --you can not do this
      
end;
------------------------------------------

this is a global variable
this is a local variable
this is a global variable

 

 

Global 변수명과 Local 변수명이 중복될 경우는 동일 영역에서 선언된 변수를 참고한다.

 

declare
    v_father_name varchar2(100):='홍길동';
    v_birthday date:='20-Jul-1981';
begin
    declare
        v_child  varchar2(100):='한강';
        v_birthday  date:='5-Apr-2013';
    begin
        dbms_output.put_line('the father name is ' ||v_father_name);
        dbms_output.put_line('the father birthday is '||v_birthday);
        dbms_output.put_line('the child name is '||v_child);
        dbms_output.put_line('the child birthday is '||v_birthday);
    end;
end;
-----------------------------------------------------------

the father name is 홍길동
the father birthday is 05-APR-13
the child name is 한강
the child birthday is 05-APR-13

 

 

Global 변수명과 Local 변수명이 같을 경우,

Local 영역에서 Global 변수를 접근하기 위해서는  begin <<>> ~ end 구조로 처리하면 된다.

<<>> 안에 넣는 키워드는 프로그래머가 임의로 정할수 있다.

 

begin <<outer>>
declare
    v_father_name varchar2(100):='홍길동';
    v_birthday date:='26-Jul-1981';
begin
    declare
        v_child  varchar2(100):='한강';
        v_birthday  date:='5-Apr-2013';
    begin
        dbms_output.put_line('the father name is ' ||v_father_name);
        dbms_output.put_line('the father birthday is '||outer.v_birthday);
        dbms_output.put_line('the child name is '||v_child);
        dbms_output.put_line('the child birthday is '||v_birthday);
    end;    
end;
end outer;
-----------------------------------------------------------

the father name is 홍길동
the father birthday is 26-JUL-81
the child name is 한강
the child birthday is 05-APR-13