0

私は割り当てを行っており、この質問に答える方法についていくつかのアイデアが必要です:

「n 個の注文項目 (2 ≤ n ≤ 10) をパラメーターとして入力することにより、ユーザーが新しい注文を追加できるようにする」

私の質問は、さまざまな量のパラメーターを渡すために何を使用できるかです。次に、アイテム(渡されたパラメーター)の量が> 2および< 10であることをテストするために、これらを格納しているものの内部をチェックする必要があります

新しい注文を挿入するには、ユーザーに顧客番号と商品の数量を入力してもらう必要があります。これらのパラメーターは、注文商品番号を渡すと同時に渡す必要がありますか?

4

2 に答える 2

1

配列を使用してこれを行うことができます。以下を参照してください。データベースに型とプロシージャを作成し、スクリプトを実行して動作を確認する必要があります。p_tab_order.COUNT コマンドを使用して、注文数を計算できます。

CREATE TYPE  type_order AS OBJECT(item_number     NUMBER(6)
                                 ,customer_number NUMBER(6)
                                 ,quantity        NUMBER(6));


CREATE TYPE type_tab_order IS TABLE OF type_order;


CREATE OR REPLACE PROCEDURE p_order(p_tab_order IN type_tab_order)
IS
BEGIN

    FOR i IN 1..p_tab_order.COUNT LOOP


    dbms_output.put_line(p_tab_order(i).item_number||' item number '
                       ||p_tab_order(i).customer_number||' customer_number '
                       ||p_tab_order(i).quantity||' quantity '
                          );


    END LOOP;


END;


DECLARE 

l_tab_order type_tab_order := type_tab_order();

BEGIN

l_tab_order.EXTEND;
l_tab_order(1).item_number := 4;
l_tab_order(1).customer_number := 5;
l_tab_order(1).quantity := 6;

l_tab_order.EXTEND;
l_tab_order(2).item_number := 5;
l_tab_order(2).customer_number := 6;
l_tab_order(2).quantity := 7;

p_order(p_tab_order => l_tab_order);


END;
于 2012-11-29T16:48:47.540 に答える
0

これを行うにはおそらく多くの方法があります。例として、注文ごとに顧客番号と発注書番号が必要であると想定します。その場合、次のことができます。

PROCEDURE ADD_A_BUNCH_OF_ORDERS(CUST_NUM_1  IN NUMBER,
                                PO_NUM_1    IN NUMBER,
                                CUST_NUM_2  IN NUMBER,
                                PO_NUM_2    IN NUMBER,
                                CUST_NUM_3  IN NUMBER DEFAULT NULL,
                                PO_NUM_3    IN NUMBER DEFAULT NULL,
                                CUST_NUM_4  IN NUMBER DEFAULT NULL,
                                PO_NUM_4    IN NUMBER DEFAULT NULL,
                                CUST_NUM_5  IN NUMBER DEFAULT NULL,
                                PO_NUM_5    IN NUMBER DEFAULT NULL,
                                CUST_NUM_6  IN NUMBER DEFAULT NULL,
                                PO_NUM_6    IN NUMBER DEFAULT NULL,
                                CUST_NUM_7  IN NUMBER DEFAULT NULL,
                                PO_NUM_7    IN NUMBER DEFAULT NULL,
                                CUST_NUM_8  IN NUMBER DEFAULT NULL,
                                PO_NUM_8    IN NUMBER DEFAULT NULL,
                                CUST_NUM_9  IN NUMBER DEFAULT NULL,
                                PO_NUM_9    IN NUMBER DEFAULT NULL,
                                CUST_NUM_10 IN NUMBER DEFAULT NULL,
                                PO_NUM_10   IN NUMBER DEFAULT NULL)
IS
BEGIN
  ADD_ORDER(CUST_NUM_1, PO_NUM_1);
  ADD_ORDER(CUST_NUM_2, PO_NUM_2);

  IF CUST_NUM_3 IS NOT NULL AND
     PO_NUM_3 IS NOT NULL
  THEN
    ADD_ORDER(CUST_NUM_3, PO_NUM_3);
  END IF;

  IF CUST_NUM_4 IS NOT NULL AND
     PO_NUM_4 IS NOT NULL
  THEN
    ADD_ORDER(CUST_NUM_4, PO_NUM_4);
  END IF;

  IF CUST_NUM_5 IS NOT NULL AND
     PO_NUM_5 IS NOT NULL
  THEN
    ADD_ORDER(CUST_NUM_5, PO_NUM_5);
  END IF;

  IF CUST_NUM_6 IS NOT NULL AND
     PO_NUM_6 IS NOT NULL
  THEN
    ADD_ORDER(CUST_NUM_6, PO_NUM_6);
  END IF;

  IF CUST_NUM_7 IS NOT NULL AND
     PO_NUM_7 IS NOT NULL
  THEN
    ADD_ORDER(CUST_NUM_7, PO_NUM_7);
  END IF;

  IF CUST_NUM_8 IS NOT NULL AND
     PO_NUM_8 IS NOT NULL
  THEN
    ADD_ORDER(CUST_NUM_8, PO_NUM_8);
  END IF;

  IF CUST_NUM_9 IS NOT NULL AND
     PO_NUM_9 IS NOT NULL
  THEN
    ADD_ORDER(CUST_NUM_9, PO_NUM_9);
  END IF;

  IF CUST_NUM_10 IS NOT NULL AND
     PO_NUM_10 IS NOT NULL
  THEN
    ADD_ORDER(CUST_NUM_10, PO_NUM_10);
  END IF;
END ADD_A_BUNCH_OF_ORDERS;

次に、ADD_ORDERプロシージャを実装して、指定された特定の順序を追加する必要があります。

おそらく最もエレガントな方法ではありませんが、方法です。:-)

共有してお楽しみください。

于 2012-12-01T02:54:30.587 に答える