私は在庫テーブルの下のように持っている:PL/SQLプロシージャは、それに応じて
warehouse_no|item_no|item_quantity
------------|-------|-------------
1 | 1000 | 300
------------|-------|-------------
2 | 1000 | 500
------------|-------|-------------
3 | 1000 | 200
------------|-------|-------------
1 | 2000 | 100
------------|-------|-------------
2 | 2000 | 200
------------|-------|-------------
3 | 2000 | 0
------------|-------|-------------
1 | 3000 | 100
------------|-------|-------------
2 | 3000 | 200
------------|-------|-------------
3 | 3000 | 0
------------|-------|-------------
今誰か例えば受注400台の項目がない場合。 1000の場合、pl/sqlはテーブルを通過し、倉庫1から300を倉庫2から取り出し、更新します。結果のテーブルには、以下のようになります。
warehouse_no|item_no|item_quantity
------------|-------|-------------
1 | 1000 | 0
------------|-------|-------------
2 | 1000 | 400
------------|-------|-------------
3 | 1000 | 200
------------|-------|-------------
を私が書いた手順は
PROCEDURE upd_inventory(p_item_no inventory.item_no%TYPE, p_quantity number)
AS
CURSOR inventory_cur IS
select MAX(item_quantity)as quantity
from inventory
where item_no=p_item_no;
v_order_quantity number:=p_quantity;
BEGIN
FOR v_inventory_cur IN inventory_cur LOOP
UPDATE INVENTORY
SET item_quantity = ((v_inventory_cur.quantity) - p_quantity);
COMMIT;
END LOOP;
END upd_inventory;
を下回っているしかし、あなたは気づいているだろうと、これは全体の数量の列を更新すると通過チェックの問題を解決しません行単位でアイテムを取り出し、それに応じて更新する。
おかげ条件は、在庫テーブルにitem_quantityを更新する場所として
これは、はるかに高速な単純SQLで解決できます。 PL/SQLプロシージャを問題の要件の一部にしていますか? (つまり、PL/SQLプロシージャでクラスを取っていますか?これは単なるクラス・アサインですか?)そうでない場合は、問題を述べ、特定のそれを解決する。 – mathguy
この手順は、新しい注文とすべてのテーブルを更新する私のpl/sqlパッケージ内にある必要があります – dwalker
@mathguyあなたは私の理解と将来の参考のためだけにSQLだけで回答を投稿してください。 – pOrinG