패키지 사양의 절차
save_db_values라는 패키지가 있습니다.
store_records라는 두 프로시저와 db_activities라는 프로시저가 있습니다. db_activities의 모든 값을 전달하여 응용 프로그램에서 db_activities를 호출합니다. 삽입 및 삭제를 위해 store_records 프로시저를 호출합니다.
패키지 사양에서 store_records 프로시저를 정의해야 합니까?사양에 store_records를 정의하지 않은 경우 오류가 발생합니다.store_records not declared in this scope.
store_records 프로시저를 노출하고 싶지 않아서 사양에 추가하지 않았습니다.이 문제를 해결하려면 어떻게 해야 합니까?
일부 절차를 공개적으로 사용하지 않으려면 해당 절차를 패키지 사양에 선언하지 않을 수 있습니다.패키지 본문에서만 선언합니다.당신이 직면한 오류의 원인은 패키지 본문의 절차에 대한 신고 순서 또는 전달되지 않은 신고입니다.예:
create or replace package Test_pkg as
2 procedure Proc1;
3 end;
4 /
Package created
create or replace package body Test_pkg as
2
3 procedure proc1 is
4 begin
5 proc2;
6 end;
7
8 procedure Proc2 is
9 begin
10 dbms_output.put_line('proc2 is being executed');
11 end;
12
13 end;
14 /
Warning: Package body created with compilation errors
Error: PLS-00313: 'PROC2' not declared in this scope
우리가 전화를 하기 때문에 이런 일이 일어나고 있습니다.Proc2
그것은 패키지의 후반부에 선언되었습니다.이 경우 선택할 수 있는 것은 다음과 같습니다.
선언하다pro2
그것을 부르는 절차 전에.
create or replace package body Test_pkg as
2
3
4 procedure Proc2 is
5 begin
6 dbms_output.put_line('proc2 is being executed');
7 end;
8
9 procedure proc1 is
10 begin
11 proc2;
12 end;
13
14 end;
15 /
Package body created
전달 선언을 사용합니다.
create or replace package body Test_pkg as
2
3 procedure Proc2;
4
5 procedure proc1 is
6 begin
7 proc2;
8 end;
9
10 procedure Proc2 is
11 begin
12 dbms_output.put_line('proc2 is being executed');
13 end;
14
15
16 end;
17 /
Package body created
SQL> exec test_pkg.Proc1;
proc2 is being executed
PL/SQL procedure successfully completed
절차는 본문에서만 선언할 수 있지만 나타나는 순서는 관련이 있으므로 호출 절차는 호출된 절차 뒤에 정의해야 합니다.또는 전달 선언을 사용하여 다음 작업을 쉽게 수행할 수 있습니다.
package save_db_values is
procedure db_activities;
end save_db_values;
package body save_db_values is
procedure store records; -- forward declaration
procedure db_activities is
begin
store_records;
end;
procedure store records is
begin
null;
end;
end save_db_values;
패키지 본체에 프로시저의 본문을 적는 것 때문에 발생하는 일입니다. 패키지 사양에 프로시저를 선언하지 않을 경우 먼저 작성해야 합니다.
효과가 있을 것입니다 :)
언급URL : https://stackoverflow.com/questions/12707204/procedure-in-package-specification
'programing' 카테고리의 다른 글
손상된 xampp 'mysql.user' 테이블을 어떻게 복구합니까? (0) | 2023.07.23 |
---|---|
Mac에서 pipas 루트로 실행할 때 "권한 거부"를 받는 중 (0) | 2023.07.23 |
다중 변수가 없음이 아닌지 확인하는 가장 단순한 방법은 무엇입니까? (0) | 2023.07.23 |
numpy의 배열에서 축은 어떻게 인덱싱됩니까? (0) | 2023.07.23 |
장고에서 한 앱에서 다른 앱으로 외부 키. (0) | 2023.07.23 |