2017-04-19 14 views
0

TOTALCOSTを合計するトリガーをCUSTOMER_IDに基づいて作成したいと考えています。 MAIN_ORDER表にデータを挿入します。GROUP BYを使用してSQLでトリガーを作成する方法は? (Oracleデータベース)

TABLE:ORDER_DETAIL

 ID | CUSTOMER_ID | TOTALCOST 
      ------------------------ 
      1 | 1000 | 50 
      2 | 1000 | 50 
      3 | 2000 | 200 
      4 | 2000 | 200 

TABLE:MAIN_ORDER

  CUSTOMER_ID | ORDER_PRICE 
      ------------------------ 
      1000 | 100 
      2000 | 400 

が、私はこれを試してみましたが、私はよく理解している場合、それは、あなたのトリガーを脇に保つ

CREATE OR REPLACE TRIGGER MOVEDETAIL 
BEFORE INSERT ON MAIN_ORDER FOR EACH ROW 
BEGIN 
SELECT ORDER_DETAIL.CUSTOMER_ID,ORDER_DETAIL.SUM(TOTALCOST) 
INTO :NEW.CUSTOMER_ID,:NEW.ORDER_PRICE 
FROM ORDER_DETAIL 
GROUP BY CUSTOMER_ID; 
END; 
+0

こんにちはを必要とせず、正しい情報を示していますSOは一般的なチュートリアルサイトではありません。あなたがGoogleの場合、 "oracle triggers tutorial"にはたくさんの例があります。 – OldProgrammer

+0

「うまくいかない」とはどういう意味ですか?エラーがありますか?もしそうなら、どちらですか?または予期しない動作が起こりますか?もしそうなら、あなたは何を期待しましたか? – Aleksej

答えて

0

を動作しません。テーブルORDER_DETAILがあり、2番目のテーブルのデータを保持したいとします(それぞれの変更に合わせてORDER_DETAILのデータと一致しているので、MAIN_ORDERは、CUSTOMER_IDの合計がで、常にORDER_DETAILになります。

あなたがトリガとそうしたい場合は、ORDER_DETAIL上のすべての変更を処理する必要が、それはあなたが(ないMAIN_ORDER上)ORDER_DETAILINSERTUPDATEDELETEのトリガ必要です。

情報を整列させておくだけでよいので、私はビューを作成することを推奨します。例えば

CREATE OR REPLACE VIEW V_MAIN_ORDER 
AS SELECT CUSTOMER_ID, 
      SUM(TOTALCOST) AS ORDER_PRICE 
    FROM ORDER_DETAIL 
    GROUP BY CUSTOMER_ID 

ビューは常に、トリガ

SQL> INSERT INTO ORDER_DETAIL(ID, CUSTOMER_ID, TOTALCOST) VALUES (1, 1000, 50); 

1 row created. 

SQL> INSERT INTO ORDER_DETAIL(ID, CUSTOMER_ID, TOTALCOST) VALUES (2, 1000, 50); 

1 row created. 

SQL> INSERT INTO ORDER_DETAIL(ID, CUSTOMER_ID, TOTALCOST) VALUES (3, 2000, 200); 

1 row created. 

SQL> INSERT INTO ORDER_DETAIL(ID, CUSTOMER_ID, TOTALCOST) VALUES (4, 2000, 200); 

1 row created. 

SQL> SELECT * FROM V_MAIN_ORDER; 

CUSTOMER_ID ORDER_PRICE 
----------- ----------- 
     1000   100 
     2000   400 

と関係なく、あなたが何をテーブルの上に

SQL> DELETE ORDER_DETAIL WHERE CUSTOMER_ID = 1000; 

2 rows deleted. 

SQL> SELECT * FROM V_MAIN_ORDER; 

CUSTOMER_ID ORDER_PRICE 
----------- ----------- 
     2000   400 

SQL> 
関連する問題