패키지,프러시저,함수 전위적 선언(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 처리가 정상적으로 완료되었습니다.
동일한 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 처리가 정상적으로 완료되었습니다.
댓글 없음:
댓글 쓰기