Developer'sWorks
Tips

動的SQLの設定方法

Webtribeでのサーバアプリケーション(SAMC)では、動的SQLでのDC実行が可能です。
実装を行うためには、動的SQLを設定するビジネスルールの作成を行い、リポジトリに登録する作業を 行う必要があります。
以下にその手順を示します。

1 動的SQL ビジネスルールの作成

動的SQLルールは通常のビジネスルールと同じ手順で作成していきます。
通常のビジネスルールの作成と違う点は下記の通りです。

下記ソースが簡単な動的SQLルールのソースとなります。

package jp.ne.mki.wedge.rule.sample;

import jp.ne.mki.wedge.rule.AbstractDcBusinessRule;
import jp.ne.mki.wedge.run.interfaces.DataInterface;

public class SetDynamicSQL extends AbstractDcBusinessRule{
	DataInterface in = null;

	public int getIOParameter(){
		in = getInRecord(0);
		
		if(in == null){
			return ERROR;
		}
		return OK;
	}

	public int execute(){
		String sql = "SELECT PCODE, PNAME, SCODE FROM GOODS";

		// inに設定されたデータが空でなければ、WHERE句を設定する。
		String mCode = in.getValue();		
		if(mCode != null && mCode.length() != 0){
			sql = sql + " WHERE " + mCode;
		}
		
		// SQLの設定
		setRuleSQL(sql);

		return OK;
	}

	public void exit(){
		in = null;
	}
}

2 動的SQLの設定

リポジトリでの定義は3つの手順をおう必要があります。

2.1 動的SQLルールの登録(OMC)

先に作成した動的SQLルールを登録します。
登録方法は通常のビジネスルールと同様になります。詳細は
OMCの使用方法を参照して下さい。

2.2 動的SQL実行用DCの作成(DMC)

DMCにて動的SQLを実行するためのDCを作成します。
DMC:DC(SQL) タブ にて適当なTABLEにて『新規作成』アイコンを選択しします。
入力方法 は 「定義入力」 でも 「フリー入力」 でもどちらでも構いません。
DC基本クラスの選択ダイアログをクリックすると、

の7件が表示されます。
動的SQLを使用するDCは、このうちRuleQueryDlcp、RuleQueryDlcp9、RuleQueryDlcp11のいずれかを選択してください。
これら基本クラスの詳細は
リファレンスドキュメント:DC基本クラス を参照して下さい。
定義入力、フリー入力、入出力データセット の 内容はいずれも空(設定なし)にします。

また、一つの動的SQL用DCを複数の個所で使いまわすことできるため、
『汎用_動的SQL実行用DC(QUERY)』というDCを一つ作成しておくことをオススメします。

2.3 SAMCの設定

2.3.1 ビジネスルールの追加

まずは、SAMC:ビジネスルール タブにて、作成した動的SQLビジネスルール を追加して下さい。
このルールのInRecordOutRecordには、ビジネスルール内で、getInRecord()、getOutRecord()で取得するものとなります。

2.3.2 動的SQL実行用DCの追加

続いて SAMC:DC タブにて、動的SQL実行用DCを追加して下さい。
このDCの 受信データセット には、発行したSQLの結果が格納されます。

また、動的SQL作成の段階で、setRuleSQL( String )メソッド実行時に、 バインド変数を含むSQLを発行した際には、 バインド時に使用するレコードを、DCの 送信データセット に設定して下さい。

バインド変数を含むSQLとは、「SELECT PCODE, PNAME, SCODE FROM LCLASS = ?」等 ?を含む形のSQLを指します。

2.3.3 DCとビジネスルールの関連付け

SAMC:DC タブと SAMC:ビジネスルール タブの追加が出来ましたら、続いてこのDCとビジネスルールを関連付けます。
DCタブの上のペインに、ビジネスルールという項目が存在します。
このセルをクリックすると、動的SQLとの関連付けダイアログが表示されますので、
2.3.1で追加したルールを選択して下さい。

2.3.4 ディシジョンテーブルにて設定

2.3.2、2.3.3で設定されたDCをディシジョンテーブルの実行リストに設定することで、
動的SQLを実行することが出来ます。
(ビジネスルールのほうは実行リストに設定する必要はありません。)

■参考
サーバー(DCパラメータ設定) → 動的SQL設定 ( MakeDcQuery ) の標準ビジネスルールでは、ルールの 引数アイテムの一番目に SQL文を格納したアイテムを設定して使用します。
つまり、このビジネスルールを使用すると 動的SQLビジネスルール の作成をせずに動的SQLを 実行することが可能になります。
-- 2003/08/22 Update