2016-07-13 17 views
0

を挿入し、私はdeposit表にdeposit_amountを合計し、final_balance表に結果を挿入したいです。 トリガーを使用することはできますか?私は2つのテーブル<code>deposit</code>と<code>final_balance</code>を作成していた列の値を計算し、別のテーブル

CREATE TABLE deposit(cust_id VARCHAR2(10),loan_id VARCHAR2(10),deposit_type VARCHAR2(10),deposit_amount NUMBER(20)); 
INSERT INTO deposit values ('001CUS1','001LOAN1','Fixed',3500); 
INSERT INTO deposit values ('001CUS2','001LOAN2','Fixed',3900); 
INSERT INTO deposit values ('001CUS3','001LOAN3','Fixed',7000); 
INSERT INTO deposit values ('001CUS4','001LOAN4','Fixed',28000); 
INSERT INTO deposit values ('001CUS5','001LOAN5','Fixed',15200); 
INSERT INTO deposit values ('001CUS6','001LOAN6','Fixed',2420); 
INSERT INTO deposit values ('001CUS7','001LOAN7','Primary',2420); 
INSERT INTO deposit values ('002CUS1','002LOAN1','Primary',27000); 
INSERT INTO deposit values ('002CUS2','002LOAN2','Primary',20200); 
INSERT INTO deposit values ('002CUS3','002LOAN3','Primary',6900); 
CREATE TABLE final_balance(
total_deposit NUMBER(20) 
); 
+0

ビューを作成する方がよいでしょうか?それを考えてください。この2つの列が変わるたびに、テーブルfinal_balanceをアップグレードする必要があります。私はあなたがいくつかのレポートが必要と仮定し、ビューはテーブルよりも良い解決策です。 –

+0

あなたが試したものを投稿してください。デポジットテーブルのデータを変更する際にfinal_balanceテーブルが自動的に更新される必要がありますか?または、デポジットテーブルの変更を処理せずに、結果をワンショットで評価する必要がありますか? – Aleksej

+0

私は合計deposit_amountの総計と総預金額フィールドに最終残高テーブルを挿入したい#evgeniyK – brids

答えて

0

あなたはワンショットの評価が必要な場合は、使用することができます。

SQL> insert into final_balance 
    2 select sum(deposit_amount) 
    3 from deposit; 

1 row created. 

あなたは自己更新結果が必要な場合は、ビューはよりよい解決策のようになります。

SQL> CREATE VIEW v_final_balance(total_deposit) as 
    2 select sum(deposit_amount) 
    3 from deposit; 

View created. 

最初は同じ結果を示しています。

SQL> select * from final_balance; 

TOTAL_DEPOSIT 
------------- 
     116540 

SQL> select * from v_final_balance; 

TOTAL_DEPOSIT 
------------- 
     116540 

depositテーブル内のデータを更新した後、ビューは、トリガを必要とせず、更新された合計金額が表示されます:

SQL> INSERT INTO deposit 
    2  VALUES (
    3    'XX', 
    4    'YY', 
    5    'ZZ', 
    6    1000000000 
    7    ); 

1 row created. 

SQL> select * from final_balance; 

TOTAL_DEPOSIT 
------------- 
     116540 

SQL> select * from v_final_balance; 

TOTAL_DEPOSIT 
------------- 
    1000116540 

あなたも、トリガーベースのアプローチを使用することができますが、それは、挿入のためのトリガーが必要になり、更新、削除して、より複雑な解決策をもたらす。トリガーの特定のニーズがない場合、私はビューが最良の解決策であると信じています。

+0

親愛なるAleksejはスマートなソリューションですが、私は通常のテーブルと同じビューテーブルを使用できますか?フロントエンドレポートを接続しますか?実際には、すべての計算が完了したプロジェクトを作成したいと思っています。私はトリガーを使用することができますか? – brids

+0

selectステートメントのビューは、まるでテーブルであるかのように使用できます。 – Aleksej

+0

私は新しい学生です私の説明、 – brids

関連する問題