0

わかりましたので、製品 ID、総売上高、および製品ごとのアイテムの総数量を含む集計テーブルを更新するのに役立つトリガーを作成しようとしています。基本的に、注文の更新後に起動するトリガーを作成する必要があります。orderplaced列がサマリーテーブルの値に設定されている場合、参照する'1'他の2つのテーブルからデータを取得する起動されたトリガーによって更新する必要がありbasketます。 。basketitem_ idproduct私はコードを作成しましたが、それについて考えて分析すると、動作する有効なコンパイル済みトリガーに到達できません。ここで何をしようとしているのかを理解できるように、コードを追加します。ありがとう!

    create or replace
    TRIGGER BB_SALESUM_TRG
    AFTER UPDATE OF orderplaced ON BB_BASKET 
    DECLARE
     CURSOR salesum_cur IS
          SELECT bi.idproduct as idp, sum(b.total) as tot, sum(b.quantity) as qua, 
    bi.orderplaced as orpl
          FROM bb_basket b, bb_basketitem bi
          WHERE b.idbasket = bi.idbasket;
    BEGIN
      FOR rec_cur IN salesum_cur LOOP
        IF rec_cur.orpl = 1 THEN
          INSERT INTO bb_sales_sum (idproduct, tot_sales, tot_qty)
          VALUES (rec_cur.idp, rec_cur.tot, rec_cur.qua));
        END IF;
      END LOOP;  
    END;

いろいろ試しましたが、これが最後です。また、カーソルの代わりにローカル変数を使用しようとしましたが、どちらの方法でも機能しませんでした。提案は大歓迎です!

ありがとう !

4

1 に答える 1

0

私があなたの要件を正しく理解していれば、次の PL/SQL が正しい方向を示しているはずです。これをテストできませんでした:

CREATE OR REPLACE TRIGGER BB_SALESUM_TRG
AFTER UPDATE OF orderplaced ON BB_BASKET
FOR EACH ROW
WHEN (new.orderplaced = 1)
BEGIN
  INSERT INTO bb_sales_sum(idproduct, tot_sales, tot_qty number)
  SELECT idproduct, sum(b.total), sum(b.quantity)
  FROM bb_basket b INNER JOIN bb_basketitem bi
  ON b.idbasket = bi.idbasket 
  WHERE b.idbasket = :new.idbasket
  GROUP BY idproduct
END;
于 2013-05-08T23:14:11.657 に答える