2015년 7월 6일 월요일

패키지,프러시저,함수 전위적 선언(Forward Declaration)

패키지,프러시저,함수 전위적 선언(Forward Declaration)

 동일한 PL/SQL블록에 여러 개의 Sub Program들이 올 수 있는데, 패키지내 함수, 프러시저는 서로 호출을 하거나 호출당하는 입장이다.
 어떤 프로시저/함수에서 다른 프로시저/함수를 호출할 때 호출당하는 프로시저/함수는 먼저 선언 되어야 한다.(구현부가 뒤쪽에 있는 경우)

SQL> DECLARE
          -- proc2 선언 및 구현
          PROCEDURE proc2(num NUMBER) IS
          BEGIN
            proc1();
          END;
        -- proc1 구현
        PROCEDURE proc1 IS
        BEGIN
          proc2(8514790) ;
        END;
      BEGIN
        NULL;
      END;
  /

        proc1();
        *
5행에 오류:
ORA-06550: 줄 5, 열9:PLS-00313: 범위 내에 'PROC1'(이)가 선언되지 않았습니다
ORA-06550: 줄 5, 열9:PL/SQL: Statement ignored

SQL> DECLARE
      -- proc1 선언
      PROCEDURE proc1;
 
      -- proc2 선언 및 구현
      PROCEDURE proc2(num NUMBER) IS
      BEGIN
        proc1();
      END;
 
    -- proc1 구현
    PROCEDURE proc1 IS
    BEGIN
      proc2(8514790) ;
    END;
 
  BEGIN
    NULL;
  END;
  /
PL/SQL 처리가 정상적으로 완료되었습니다.

SQL> DECLARE
  2    -- proc1 구현
  3    PROCEDURE proc1 IS
  4    BEGIN
  5      NULL;
  6    END;
  7    -- proc2 선언 및 구현
  8    PROCEDURE proc2(num NUMBER) IS
  9    BEGIN
 10      proc1();
 11    END;
 12  BEGIN
 13    NULL;
 14  END;
 15  /

PL/SQL 처리가 정상적으로 완료되었습니다. 

댓글 없음:

댓글 쓰기