1

この関数を呼び出すのが好きです:

CREATE OR REPLACE PACKAGE orders_salary_manage2 AS
  FUNCTION total_calc(p_order in NUMBER)
  RETURN NUMBER;
END;

CREATE OR REPLACE PACKAGE BODY orders_salary_manage2 AS
  tot_orders NUMBER;

FUNCTION total_calc(p_order in NUMBER)
RETURN NUMBER
IS
   c_price product.unit_price%type;
   c_prod_desc product.product_desc%type;
   v_total_cost NUMBER := 0;
   CURSOR c1 IS
      SELECT product_desc, unit_price 
      FROM product 
      WHERE product_id IN (SELECT fk2_product_id 
                           FROM order_line 
                            WHERE fk1_order_id = p_order);
BEGIN
   OPEN c1;
   LOOP
      FETCH c1 into c_prod_desc, c_price;
      v_total_cost := v_total_cost + c_price;
      EXIT WHEN c1%notfound;
   END LOOP;
   CLOSE c1;
   return v_total_cost;
END;

このトリガーから:

CREATE OR REPLACE TRIGGER trg_order_total
BEFORE DELETE ON placed_order 
FOR EACH ROW
DECLARE
v_old_order NUMBER := :old.order_id;
BEGIN
total_calc(v_old_order);
END;

しかし、私はこのエラーを受け取り続けます。これだけのエラー番号がないことに注意してください:

4 行目のエラー: PL/SQL: ステートメントは無視されました

  1. 削除する前にplaced_order
  2. 行ごとに
  3. 宣言する
  4. v_old_order NUMBER := :old.order_id;
  5. 始める

pl/sql は初めてで、何が問題を引き起こしているのかわかりません。ユーザーが注文テーブルから注文を削除すると、トリガーは関数を呼び出して注文のすべての製品を追加する必要があります。

ありがとうございました

4

1 に答える 1