2017-06-28 11 views
0

私は現在データベースクラスを取得しており、データベースにいくつかのトリガーを必要とします。 私のグループはライブラリデータベースを作成しており、属性DaysOutの値が「90」の場合にトリガーを作成する必要があります。料金と呼ばれる別の属性は「10」に増加します。これは可能なトリガーですか? 私はいくつかの構文を書いて教授に送ってくれましたが、私には最低限のアドバイスをくれました。構文は次のとおりです。特定の値でテーブルを更新するためのトリガーを作成する

CREATE TRIGGER Late_Fee 
AFTER UPDATE OF DaysOut ON BOOKS 
WHEN DaysOut = 90 UPDATE CUSTOMERS 
SET Fees = Fees + 10 
WHERE Cust_ID = Cust_ID; 

ご協力いただければ幸いです。

+0

あなたはどのようなDBMSを使用していますか?このようなシナリオでは実用的な答えがないので、大学のデータベースコースは実際のDBMSに関係なく、ANSI-SQL標準からどうやって明示的に外れるのか嫌いです。この質問に対する真の答えは、使用されているDBMSに依存しているはずですが、トリガー作成のための同様の構文をサポートするものは多数あります。 –

+0

私たちは実際に実際のDBMSを確立していません。この本は、さまざまな章でOracleを参照してからSQL-99を参照しています。私はそのオラクルを想定していますが、これは私の最初のデータベースコースであり、完全にはわかりません。あなたの応答をありがとう! –

+0

ANSI-SQL 99の可能性が高いです。歴史的に普及しているDBMSであるため、この本はオラクルに言及している可能性があります。しかし、私の経験では、これらのタイプの本は、実際のDBMSシステムの例をめったに表示しません(これは、私が大学で取ったデータベースの習得を完全に嫌っている理由です)。 –

答えて

0

私のコメントで述べたように、役に立つ答えは使用しているDBMSによって異なります。これは大学のコースであるように見えるので、おそらくDBMSを使用しておらず、その答えはおそらく実際のSQLの実装ではなくANSI-SQL標準に基づいているでしょう。これは、ほとんどの大学データベースコースが嫌いな理由です。教授は、実際には経験の代わりに、20年近く前に書かれた本を読んでしまうのです(私はこのタイプのコースを教える多くの教授が、データベースエクスペリエンス)。私はあなたの教授に、その答えが意図されているDBMSを尋ねるでしょう。教授があなたの本を読んでいないとか、ANSI-SQL標準を使っていると言われたら、これは仮説的な質問です。私の意見では技術的に適切な答えはありません。正解でした、使用しているDBMSに合わせて変更する必要があります)。このようなトリガを実際のDBMSシステムでどのように実装できるかの例をいくつか示します。

マイSQL

DELIMITER $$ 

CREATE 
TRIGGER tr_Late_Fee AFTER UPDATE 
ON BOOKS 
FOR EACH ROW BEGIN 

    IF NEW.DaysOut = 90 THEN 
     UPDATE CUSTOMERS 
     SET Fees = Fees + 10 
     WHERE Cust_ID = NEW.Cust_ID; 
    END IF; 

END$$ 

DELIMITER ; 

資源:

https://docs.microsoft.com/en-us/sql/t-sql/statements/create-trigger-transact-sql

https://www.sitepoint.com/how-to-create-mysql-triggers/

+0

MySQL版はこの本の例によく似ていますが、私は教授に電子メールを送り、これが受け入れられるかどうかを確認します。どうもありがとうございます! –

+0

'inserted'に複数の行がある場合はどうなりますか? – hatchet

+0

あなたはそのような状況について正しいと思います.SQL-Server用に書いたサンプルコードは、この特定のシナリオを処理しません。そのような場合、提供されたコードは正しく機能しません(実際にはSQL例外が発生します)。これを処理する1つの方法は、OPの要件をはるかに超えるカーソルを作成することです。 SQL Serverにトリガを書き込む方法の例はたくさんあります。 SQL Serverの例を除外するかもしれないので、現時点でこれを実行して最適化する時間はあまりありません。 –

関連する問題