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

リンクジョイン([結合リンク]コマンド)

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

NULL

19.5 リンクジョイン([結合リンク]コマンド)

リンクジョインは、単一のメインテーブルとリンクされた結合テーブル(ジョインテーブル )と間に1対多 のリレーションを作成し 、データビューを表示したいときに使います。この処理は、RDBMS側で実行され ます。この処理では、dbMAGICによりSQL等価結合ステート メントが生成されます。

リンクジョインの機能

リンクジョイン([結合リンク]コマンド )を使うことで、RDBMSに搭載されている結合機能を十分活用で きます。また、dbMAGICのデータ読込、ロック機能も併せて使用されます。なお、ユーザにより行の更新 が実行された場合、またはdbMAGICにより再計算が実行されたときには、このリンクジョインは、リンク 確認処理([ 確認リンク]コマンド )と同様の働きをします。

パラメータ 意味

リンクモード J=結合または、O=外部結合を設定します。

テーブル識別番号 この欄でズームすると 、データベースのテーブルの一覧が表示されますので、ここ でリンクテーブルを選択します。

インデックス テーブルで使われるインデックスを指定します。なお、メインテーブルとリンクテー ブルとの関係は1対多となりますので、ユニークインデックス以外は選択できませ ん。この欄でズームすると 、リンクテーブルのユニークインデックスの一覧が表示 されますので 、ここでインデックスを選択します。

順 この欄は、リンク処理では使いません。

戻り 戻りコードが返る項目を指定できます。この戻りコードで、リンク処理が成功したか 失敗したか判定できます。リンクジョインが実行され 、結合ステート メントが返る と 、この項目にTRUEが返ります。また、結合リンクが確認リンクとして実行( つ まり、再計算または更新)されたときには、確認リンク処理の場合と同じ戻りコード が返ります。

条件 確認リンク処理の場合と同じです。

SQLガ イド 19.5リンクジョイン([ 結合リンク]コマンド ) 19–5

ジョインを行う際の注意

1. ジョインテーブルのインデックスセグ メントはすべて選択しなければなりません 。また、各インデッ クスセグ メントにそれぞれ 、位置付式が必要です。

2. ジョインテーブルには 、特定の範囲が必要です。このため、最小位置付式と最大位置付式は同じでな ければなりません。

3. ジョインテーブルの位置付式としては、次の式が指定できます。

■ 定数

■ タスクで選択済みのメインテーブルのカラムに対する参照

■ タスクで選択済みのリンクテーブルのカラムに対する参照

■ 非複合式( 複合式は指定できません )

ジョインの動作

タスクのデータビューの作成と同時に 、結合ステート メントが作成されます。この結合ステート メントは 、 すべてのジョインテーブルに対して機能します。また、WHERE句も生成され 、ここでは、定数のほか、メ インテーブルとジョインテーブルのカラムの名前が定義されます。この後、dbMAGICによりデータビュー が最終的に構築されます。

ロック

行のロックが必要な場合、dbMAGICによりデータベース上でロックが設定されます。SQLゲートウェイで 論理ロックが使われる場合、メインテーブルとリンクテーブルに対して同時に論理ロックがかけられます。

また、SQLゲートウェイで使われるのが物理ロックの場合、SQLゲートウェイにより、RDBMS側で、ジョ インテーブルのSELECTステート メントでFOR UPDATE句が使用できるかど うかがチェックされます。

・RDBMSで、ジョインテーブルのSELECTステート メントでFOR UPDATE句が使用できる場合(たと えば 、Oracleなど )、FOR UPDATE句によりメインテーブルとジョインテーブルに対して同時にロッ クがかけられます。なお、ジョインテーブルについては、アクセスモードが「書出」のジョインテーブ ルに対してだけロックがかけられます。

・RDBMSで 、ジョインテーブルのSELECTステート メントでFOR UPDATE句が使用できない場合、

ロックは、リンクジョインに関連しているテーブルそれぞれに対して、別個のSELECT...FOR UPDATE ステート メントを使用して設定されます。

タスクで、ジョインテーブルが「読込」アクセスモード で開かれている場合、ジョインテーブルにはロック はかけられず、メインテーブルにだけロックが設定されます。

データベースの更新が必要になった場合、各ジョインテーブルが別個に更新されます。この場合、更新は 、 テーブルの位置インデックスを使用して実行されます。

Oracleのロックの例

Oracleの場合、結合処理に関連しているテーブルのアクセスモード と共有モードがdbMAGICによりチェッ クされます。この後、ロックが必要なテーブルがあれば 、そのテーブルのいずれかのカラムがSELECT FOR UPDATEステート メントのOF句に追加されます。

たとえば 、「SelectA.col1, A.rowid, B.col1, b.rowid from Table1 A, Table2 B where A.col1=B.Col1 and A.rowid=

’カレントの行の番号’ FOR UPDATE OF a.rowid」のようになります。

上記の例では、Table1(エイリアスはA)の行(a.rowid)がロックされることになります。

19 リンクジョインを行う際の注意

1. リンクジョインは、データベースがSQLデータベースの場合にのみ有効です。また、結合できるファ イルは同一種類のデータベースのものに限ります。

2. リンクジョインとリンク確認処理の主な相違は、次の通りです。

・ リンク確認処理では、まず、リンクテーブルの行の取り出しが試みられます。ここで所定の行が 見つからなかったときには、その行に対応するメインテーブルの行が有効になります。

・ リンクジョインでは、内部結合のSELECTステート メントを使用してメインテーブルとジョイン テーブルが処理されます。このため、制約定義が重要になります。

3. dbMAGICによってSELECTステート メントが生成され 、そのSELECTステート メントで複数のファ イルが指定されている場合、テーブルの名前としてはエイリアスが使われます。たとえば 、メインテー

ブルはA、最初の結合ファイルはBなどとなります。

4. 結合処理とキャッシュ

結合処理のキャッシュは、[タスク制御]ダ イアログの[高度な設定]タブの[キャッシュ範囲]で設定 できます。結合処理の場合、ビューには メインテーブルとすべてのリンクテーブルの行が置かれ 、こ の行についてキャッシュが実行されます。キャッシュの設定欄は[DBテーブル ]ウィンド ウにもあり ますが 、この欄は通常のリンクテーブルに関するもので、したがって、リンクジョインの場合には無 関係になります。また、リンクジョインでは、キャッシュは処理の種類によって機能が異なります。以 下、順に説明します。

挿入( 行の作成)

新規の行を作成したときには、その行はデータベースに挿入されますが 、キャッシュには格納されませ ん。行は、その後、取り出しが実行された(フェッチコマンド またはカレントの行の取り出しコマンド が送出された )ときにキャッシュに格納されます。

削除

行の削除が実行されると、データベースから行が削除されると同時にキャッシュの行も削除されます。

更新

ビューの行のカラムの内容を更新すると、単一もし くは複数のステート メントがデータベースに送ら れます。これで、テーブルのカラムの内容が更新されます。

更新対象が メインテーブルの場合、行はキャッシュから削除されます。その後、フェッチコマンド また はカレントの行の取り出しコマンドが実行されると、行は再度、キャッシュに格納されます。この処理 が行われるのは、行の更新により、メインテーブルとリンクテーブルを関連付けているカラムが変更 されることがあるためです。また、更新中は、キャッシュに格納されている行の値はチェックされるこ とがなく、このため、再度のキャッシュへの格納が必要になります。

一方、更新対象がリンクテーブルの場合、キャッシュはクリアされ 、その後、取り出された行がすべて、

もう一度、キャッシュに格納されます。これは、メインテーブルの複数のレコードがリンクテーブルの 単一の行とリンクされている場合、リンクテーブルの行が更新されると 、そのほかの行についても値 の変更が起こることがあるためです。また、メインテーブルのこういった行は、リンクテーブルから 検索することはできません。

SQLガ イド 19.5リンクジョイン([ 結合リンク]コマンド ) 19–7

キャッシュは、次の場合にクリアされます。

1) タスクモードが「登録」に変わったとき。

2) ユーザによりソートが実行されたとき。

3) ユーザにより位置付が実行されたとき。

4) ユーザにより範囲に関する処理が実行されたとき。

5) インデックスが変更されたとき。

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