2017-11-21 8 views
0

私はSQLiteを使用しています。トリガーを作成しようとしています。 テーブルを作成するコードは次のとおりです。データベースが更新または挿入されたときに合計を計算するSQLITEトリガを書き込む方法はありますか?

CREATE TABLE SEM1 (
USN VARCHAR (10) REFERENCES studentDet (USN) ON DELETE CASCADE 
        UNIQUE 
        PRIMARY KEY 
        NOT NULL, 
SUB1E INTEGER (2), 
SUB2E INTEGER (2), 
SUB3E INTEGER (2), 
SUB4E INTEGER (2), 
SUB5E INTEGER (2), 
SUB6E INTEGER (2), 
SUB7E INTEGER (2), 
SUB8E INTEGER (2), 
TOTAL INTEGER (4) 

);

トリガ名:CALCTOTAL1

:表ON UPDATE

:SEM1

範囲:行ごと

コード:

UPDATE TOTAL SET TOTAL=SUM(INSERTED.SUB1E,INSERTED.SUB2E,INSERTED.SUB3E,INSERTED.SUB4E,INSERTED.SUB5E,INSERTED.SUB6E,INSERTED.SUB7E,INSERTED.SUB8E); 

アクションAFTER

そして、私はエラーを取得しています:

[22:59:26] Error while executing SQL query on database 'RAS': wrong number of arguments to function SUM() 

UPDATE 1:

UPDATE TOTAL SET TOTAL=(INSERTED.SUB1E+INSERTED.SUB2E+INSERTED.SUB3E+INSERTED.SUB4E+INSERTED.SUB5E+INSERTED.SUB6E+INSERTED.SUB7E+INSERTED.SUB8E) WHERE USN=NEW.USN; 

答えて

0

SUM()はすなわち、それは複数の行に取り組んでいます、集計関数です。
同じ行の複数の値を加算するには、+を使用してください。

そして、UPDATEの後にテーブル名を指定する必要があります。

そしてSQLiteにはINSERTEDがありません。新しい行の値はNEWとなります。しかし、この場合、テーブルの値を使用するだけで済みます。

そして、あなたはちょうど更新されてしまったの行にUPDATEを制限する必要があります。今、私は新しいエラー取得しています

UPDATE SEM1 
SET TOTAL = SUB1E + SUB2E + SUB3E + SUB4E + SUB5E + SUB6E + SUB7E + SUB8E 
WHERE USN = NEW.USN; 
+0

: - データベースの「RAS」にSQLクエリを実行中に、[午後五時24分46秒]エラー:このようなテーブルはありません:main.TOTAL – introvertkernel

+0

私は変更されたコードを追加しました..(更新1) – introvertkernel

関連する問題