オブジェクト指向、Javaを取り入れた
新しい業界標準「SQL99」詳細解説
第二章 柔軟さを増したデータ構造(4)
トリガー
トリガーは、ある表のデータ行を変更するSQLデータ操作文(INSERT,UPDATE、DELETE)が要求されたことをきっかけにして、あらかじめCREATE TRIGGER文によって定義しておいた、別の1個以上の表を変更する操作を同じトランザクション中で自動的に行うことを可能にする機能である。変更するという事象が発生したときに定義しておいた操作を、DBMSが自動的に発火するという意味でトリガー(引き金)ということばが使われる。 トリガーの導入によって「受動的な」DBMSが「能動的な」DBMSに変身したとさえ言われる重要な機能である。
トリガーそれ自身はリレーショナルDBMSにとって必ずしも目新しい機能ではなく、すでに幾つかの製品によって実装されている。しかし残念ながら、トリガーの操作を記述する方法は、製品によって異なり可換性がない。SQL99は、そのような問題を解決するためにトリガーの定義を標準化した。これによって、トリガーの処理も異なるベンダー製品間でソースレベルでの移植性が向上することが期待される。
トリガーが起動されるのは、変更元の表への更新操作の前か後いずれでも可能である。トリガーの中では、別表へのINSERT文、UPDATE文、DELETE文だけでなくストアドプロシージャを呼び出すCALL文も実行可能なので、必要であれば複雑な業務ロジックをその中に組み込むことができ、かなり強力な機能といえる。もちろん、一連の処理の中で異常があれば、トリガー中の処理も含めて元となった変更処理もロールバックされるのでデータの整合性は自動的に維持される。
ここでは、図29に示すような、あるトランザクションが在庫表から部品を引当てる典型的な在庫引当の例を考えてみよう。
図29 トリガーにより、在庫の変更が自動的にストアドプロシージャを呼び出す
図30に、トリガーをCREATE TRIGGER文によって定義した例を示す。
図30 トリガー(AFTER トリガー)の定義例
この例では、次のような処理を行う。
- 部品表の在庫数列または最大在庫数列がUPDATE文によって更新された場合、「発注」という名前のトリガーが起動される。
- もし更新された後の在庫数列の値が最大在庫数列の値の10%よりも小さくなった場合には、発注表にその部品番号で最大在庫数と在庫数の差を発注量として1行を挿入する。そうでなければ、何も行わない。発注に際してもっと複雑な業務ロジックが必要な場合は、INSERT文の代わりにそのような処理を行うストアドプロシジャを呼び出してもよい。
- 発注処理を行ったことを示すメッセージを電子メールで発信するストアドプロシージャを呼び出す。
最後に、BEFOREトリガーの簡単な例を示す。例えば、基本給の昇給を行うとき、昇給後の基本給額が、昇給前の基本給額よりも少なくとも1.2倍を超えるようにするにはどのようにすればよいだろうか。次のようなBEFOREトリガーを考えてみよう。
CREATE TIRGGER 昇給検査 |
この昇給検査トリガーは、社員表の基本給額列が更新されたとき、昇給後の基本給額(newrow.基本給額)が昇給前の基本給額(oldrow.基本給額)の1.2倍未満であれば、強制的に更新値を昇給前の1.2倍に変更しているのである。このようにトリガーは、更新前の入力データの妥当性検査を行うこともでき、プログラムの修正なしに正しい値に設定し直して更新操作を進めることもできるのである。
トリガーは、あらかじめ指定した表のデータ行への変更操作に伴う共通の操作をDBMS中に格納するところに特徴がある。オブジェクト指向の言葉で言い替えれば、オブジェクト(表)に対する特定のメソッド(トリガー)の操作の内部処理ロジックをアプリケーションから分離し、隠蔽する。そしてそのメソッドをDBMS管理者が一元管理することができる。
このようにトリガーを上手に活用すれば、アプリケーションプログラムからデータに密着した処理を分離し、その結果アプリケーションプログラムの工数を削減し、その品質と開発生産性を向上することが期待できるだろう。
とびら 新しい業界標準「SQL99」詳細解説 SQL99の背景と特徴 |
第二章 柔軟さを増したデータ構造
ユーザー定義可能な新しいデータ |
第三章 SQLJと今後の標準化動向 クライアント/サーバ環境のための機能強化
|
「Master of IP Network総合インデックス」 |
- 完全HTTPS化のメリットと極意を大規模Webサービス――ピクシブ、クックパッド、ヤフーの事例から探る (2017/7/13)
2017年6月21日、ピクシブのオフィスで、同社主催の「大規模HTTPS導入Night」が開催された。大規模Webサービスで完全HTTPS化を行うに当たっての技術的、および非技術的な悩みや成果をテーマに、ヤフー、クックパッド、ピクシブの3社が、それぞれの事例について語り合った - ソラコムは、あなたの気が付かないうちに、少しずつ「次」へ進んでいる (2017/7/6)
ソラコムは、「トランスポート技術への非依存」度を高めている。当初はIoT用格安SIMというイメージもあったが、徐々に脱皮しようとしている。パブリッククラウドと同様、付加サービスでユーザーをつかんでいるからだ - Cisco SystemsのIntent-based Networkingは、どうネットワークエンジニアの仕事を変えるか (2017/7/4)
Cisco Systemsは2017年6月、同社イベントCisco Live 2017で、「THE NETWORK. INTUITIVE.」あるいは「Intent-based Networking」といった言葉を使い、ネットワークの構築・運用、そしてネットワークエンジニアの仕事を変えていくと説明した。これはどういうことなのだろうか - ifconfig 〜(IP)ネットワーク環境の確認/設定を行う (2017/7/3)
ifconfigは、LinuxやmacOSなど、主にUNIX系OSで用いるネットワーク環境の状態確認、設定のためのコマンドだ。IPアドレスやサブネットマスク、ブロードキャストアドレスなどの基本的な設定ができる他、イーサネットフレームの最大転送サイズ(MTU)の変更や、VLAN疑似デバイスの作成も可能だ。
|
|