programing

패키지 사양의 절차

subpage 2023. 7. 23. 14:15
반응형

패키지 사양의 절차

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

반응형