• 検索結果がありません。

ストアドプロシージャとトリガ

ドキュメント内 dbMAGIC Ver8.2 SQLガイド (ページ 69-74)

第 9 章 データの整合性

9.4 ストアドプロシージャとトリガ

スト アドプロシージャ

宣言型参照整合性がまだ開発されていなかった頃、ビジネスルールに対する要望が強まりましたが 、そんな 状況の中で考え出されたのがデータベーストリガ技術です。データベーストリガ技術の一つとして、ストア ドプロシージャがあります。このストアドプロシージャは、上で紹介した制約機能を実現する上で有効です。

また、ストアドプロシージャを使うことで、データ構造だけでは管理できないビジネスルールを使用できる ようになりますし 、ネットワークトラフィックの軽減にも有効です。

ストアドプロシージャは、その形式は複数のSQLステート メントの集合で、別のSQLステート メントから 呼び出すことができます。そのほか、dbMAGICなど 、SQL以外のコマンド 言語を使用して呼び出すことも できます。ストアドプロシージャは、通常、データベースで使われるビジネスルールを強化したい場合に使 います。また、手続き言語を使用して、ストアドプロシージャの機能を補完することもできます。

SQLガ イド 9.3データベースで使用できる制約 9–3

ストアドプロシージャは、プロシージャまたは関数の形でデータベース内に保存されます。データベースに よって、ストアドプロシージャの扱いは異なります。たとえば 、データベースによっては、ストアドプロシー ジャはコンパイル済みコードとして保存されます。ストアドプロシージャの作成に使う言語は、標準は決まっ ていませんが 、基本規則はほぼ同じです。データベースに対してSQLコマンドを使用してアクセスが可能な ソフトウエアであれば 、ストアドプロシージャにもアクセスが可能です。

以下は、データベースシステムがそれぞれ 、Oracle、MS-SQLの場合のストアドプロシージャの記述例です。

Oracleの場合:

Create or replace procedure sp1 (p1 char in, p2 integer out) as

begin

update table1 set fld1 = fld1(7 where fld1 = p1;

select fld2 into p2 where fld1 = p1;

end sp1;

MS-SQL Serverの場合:

Create procedure sp1 @ p1 char(5) as

begin

insert into table1 values (’a’,@p1) select fld2 from table2 where fld1=@p1 end

スト アドプロシージャの実行

MS-SQL ServerなどのRDBMSでは、ストアドプロシージャは、SELECTステート メントと同じようにして 実行できます。ストアドプロシージャの中でSELECTステート メントを使い、そのSELECTステート メン トで複数の行が返った場合、各行をフェッチできます。これは、SELECTステート メントのカーソルがある ためです。Oracleでは、ストアドプロシージャを実行すると、通常は単一の行が返ります。ただし 、複数の 行が返るようにすることもできます。

例:

Oracleの場合

execute sp1(p1,p2)

MS-SQL Serverの場合 sp1(’hello’)

結果:

Fld1/hello

ト リガ

データベーストリガとは、データベースイベント(INSERT、UPDATE、DELETEなど のステート メントに よる処理)を実行できる処理をいい、SQLステート メントのほか、ストアドプロシージャを実行させること もできます。

9 データベーストリガは、とくに、データベースのいずれかの場所でデータの更新を実行すると、そのほかの場 所でも更新が引き起こされるような処理に有効です。たとえば 、トリガは、次のような処理に利用できます。

■ 既存の受注テーブルに新規の行を追加する処理。この場合、受注テーブルの受注合計の値が更新され ます。

■ 在庫テーブルの行を削除する処理。この場合、通常、在庫数量のチェックが行われ 、在庫数量が一定の レベルを下回ると、レポートが出力されます。

構文:

Create trigger trig1 table1 on table1 for update

as begin

update table2 set table1.fld2=

table1.fld2+updated.fld2 where

table1.fld1=updated.fld1

注意:

トリガの記述方法は、RDBMSによって異なります。トランザクションの種類によっては、通常のアプ リケーションの手法よりもデータベーストリガやストアドプロシージャを使った方が効率よく処理でき ることがあります。トランザクションについては、このあと詳しく解説します。

SQLガ イド 9.4ストアドプロシージャとトリガ 9–5

10 章 ト ランザクション

章目次

10.1ト ランザクションのメカニズム : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : :10–2 10.2 分離レベル : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : :10–3 10.3 ロックレベル: : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : :10–4 10.4 ロックの実行: : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : :10–5 10.5 ロック有効時間 : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : :10–5

10

章 トランザクション

トランザクションは、データベースに関する何らかの処理で、単一もしくは複数のSQLステート メントで構 成されます。トランザクションを構成するSQLステート メントは、通常、相互に密接に関連していますが 、 実際には別個に独立して機能します。トランザクションを構成するSQLステート メントは、トランザクショ ンの中の論理単位と考えることもできます。トランザクション内のSQLステート メントは、それぞれ 、その トランザクションのタスクの一部を担当し 、こういったSQLステート メントが集まって単一のトランザク ションが成り立ちます。単一のトランザクションは、このように独立した論理単位としてまとめられている ため、DBMS側で一度に実行されます。つまり、DBMS側から見ると 、トランザクションを構成するSQL ステート メントは、その処理の流れが一貫していることが必要になります。

アプ リケーションで、データベース中の複数のテーブルに対して更新を行う場合、トランザクションはデー タベースの整合性に注意して定義しなければなりません。

ドキュメント内 dbMAGIC Ver8.2 SQLガイド (ページ 69-74)