0

1 時間以上苦労しています...なぜこれはコンパイルされないのでしょうか?

Body は問題なくコンパイルされます。

create or replace package body "PKG_CUSTOMER" is

PROCEDURE Create_Customer
(  pr_customer_id  customer.Customer_id%type,
      pr_country customer.country%type,
      pr_first_name  customer.first_name%type,
      pr_last_name  customer.last_name%type, 
      pr_birth_date   customer.birth_date%type,
      pr_customer_type customer.customer_type%type,
      pr_address customer.address%type)

   IS
   BEGIN
      INSERT INTO customer (Customer_ID,Country,First_Name,Last_Name,Birth_Date,Customer_Type,Address)
         VALUES(pr_customer_id, pr_country, pr_first_name, pr_last_name, pr_birth_date, pr_customer_type, pr_address);
   END Create_Customer;


   PROCEDURE Delete_Customer(pr_customer_id   customer.customer_id%type) IS
   BEGIN
   DELETE FROM order_line WHERE fk1_order_id IN (SELECT order_id FROM placed_order WHERE fk1_customer_id = pr_customer_id);
   DELETE FROM placed_order WHERE fk1_customer_id = pr_customer_id;
   DELETE FROM customer WHERE customer_id = pr_customer_id;
   END Delete_Customer;


end "PKG_CUSTOMER";​

しかし、仕様はコンパイルされません:

create or replace package PKG_CUSTOMER as

Procedure CREATE_CUSTOMER;
Procedure DELETE_CUSTOMER;

end;​

このエラーが発生しています:

Compilation failed,line 3 (21:20:46)
PLS-00323: subprogram or cursor 'CREATE_CUSTOMER' is declared in a package specification and must be defined in the package bodyCompilation failed,line 4 (21:20:46)
PLS-00323: subprogram or cursor 'DELETE_CUSTOMER' is declared in a package specification and must be defined in the package body

私はOracle APEXを使用しています。

4

1 に答える 1

5

パッケージ仕様は、公開するプロシージャの完全な仕様を提供する必要があります。これにはパラメータが含まれます。パッケージ内で宣言した両方のプロシージャーを、パッケージ外の呼び出し元が使用できるようにしたいとします。

create or replace package PKG_CUSTOMER 
as
  Procedure CREATE_CUSTOMER(  
        pr_customer_id  customer.Customer_id%type,
        pr_country customer.country%type,
        pr_first_name  customer.first_name%type,
        pr_last_name  customer.last_name%type, 
        pr_birth_date   customer.birth_date%type,
        pr_customer_type customer.customer_type%type,
        pr_address customer.address%type);
  Procedure DELETE_CUSTOMER(pr_customer_id   customer.customer_id%type);
end;​

それぞれが 0 引数を受け入れるCREATE_CUSTOMERおよびプロシージャを宣言することを意図している場合は、それらのプロシージャもパッケージ本体に実装する必要があります。DELETE_CUSTOMER

于 2013-03-14T21:26:55.547 に答える