0

顧客データベース内の現在の顧客数をカウントする関数をパッケージ本体内に作成し、顧客を作成する関数を作成しました。しかし、パッケージ自体に何を入れる必要があるのか​​ わかりません。パッケージ本体内にあるコードは次のとおりです。

 FUNCTION count_customer
 RETURN NUMBER is
 total NUMBER;
 BEGIN
 SELECT COUNT(*) into total FROM customer;
 RETURN (total);
 END;


FUNCTION CREATE_CUSTOMER(        
       Country IN VARCHAR2
      ,First_Name IN VARCHAR2
      ,Last_Name IN VARCHAR2
      ,Birth_Date IN VARCHAR2
      ,Customer_Type IN VARCHAR2
      ,Address IN VARCHAR2
) return VARCHAR2 IS
  new_customer_id VARCHAR2(8);
BEGIN
SELECT custid_seq.NEXTVAL
INTO new_customer_id
FROM DUAL;
INSERT INTO customer (Customer_id, Country, First_Name, Last_name, Birth_date, Customer_Type, Address)
VALUES (new_customer_id, Country, First_Name, Last_name, Birth_date, Customer_Type, Address);
total_customers := total_customers + 1;
RETURN (new_customer_id);
end;

そして、パッケージ本体の後半で、新しいカウントを計算するためにこれを持っています。

BEGIN
total_customers := count_customer();
END;

私が抱えている問題は、実際のパッケージに何を入れるかです。私はパッケージ内で顧客の作成を行っていますが、これは顧客数に問題があるだけです。

アイデアはありますか?

4

2 に答える 2

2

パッケージの外部からアクセスできるようにするプロシージャまたは関数を宣言する必要があります。デフォルトではプライベートです。つまり、同じパッケージ内でのみ呼び出すことができます。

これらの関数の両方を公開するには:

CREATE PACKAGE my_package AS
    FUNCTION count_customer
     RETURN NUMBER;

    FUNCTION CREATE_CUSTOMER(        
       Country IN VARCHAR2
      ,First_Name IN VARCHAR2
      ,Last_Name IN VARCHAR2
      ,Birth_Date IN VARCHAR2
      ,Customer_Type IN VARCHAR2
      ,Address IN VARCHAR2
    ) return VARCHAR2;
END my_package;

CREATE PACKAGE BODY ...

ドキュメントにはさらに多くの情報があります。

count_customers()しかし、あなたが持っているものから、私はあなたが本当は暴露されたくないのではないかと思います。の現在の値を返す別のパブリック関数が必要ですtotal_customers。これは、すべての挿入と削除が常にパッケージを通過することを前提としていますが、それ以外の場合はカウントがずれてしまいます。

于 2013-04-12T12:07:18.423 に答える
1

「外部」からアクセスしたい関数またはプロシージャの宣言部分を次のように配置します。

FUNCTION count_customer RETURN NUMBER;
于 2013-04-12T12:06:10.983 に答える