SQL ビジネス・サービスの使用法
インターシステムズでは、SQL を使用してデータをプロダクションに読み込む事前構築済みのビジネス・サービスを 2 つ提供しています。1 つはクエリ用、もう 1 つはストアド・プロシージャ用です。ビジネス・サービスを使用してクエリを実行するには、EnsLib.SQL.Service.GenericService をプロダクションに追加します。クエリではなく SQL プロシージャを実行したい場合は、EnsLib.SQL.Service.ProcService を使用します。
これらの組み込みのビジネス・サービスは、受信 SQL アダプタ (EnsLib.SQL.InboundAdapterOpens in a new tab) を使用して外部データ・ソースにアクセスします。場合によっては、このアダプタとその結果の処理方法を詳細に制御できるカスタム・ビジネス・サービスを構築しなければならないことがあります。
データ・ソース名の指定
プロダクションで操作するデータが含まれるデータ・ソースを指定するには、管理ポータルを使用して、以下のビジネス・サービス設定を定義します。
このデータ・ソース名は、接続先である外部データ・ソースを指定します。InterSystems IRIS® では、定義済みの InterSystems SQL ゲートウェイ接続、JDBC URL、およびオペレーティング・システムで構成した ODBC DSN の 3 種類の形式を自動的に区別します。
管理ポータルの [システム管理]→[構成する]→[接続性]→[SQLゲートウェイ接続] ページから構成された JDBC 接続または ODBC 接続の名前とこの名前が一致すると、その仕様のパラメータが使用されます。エントリが構成済みの接続名ではなく、そこにコロン (:) が使用されていると、その名前は JDBC URL と見なされます。それ以外の場合は ODBC DSN と見なされます。
以下の例は、JDBC URL を参照する DSN の名前を示しています。
jdbc:IRIS://localhost:9982/Samples
以下の例は、Microsoft Access データベースを参照する ODBC DSN の名前を示しています。
accessplayground
このデータ・ソースがパスワードによって保護されている場合は、ユーザ名とパスワードを含むプロダクション認証情報を作成します。その後、これらの認証情報の ID と一致するように Credentials を設定します。詳細は、"その他の実行時設定の指定" を参照してください。
JDBC データ・ソースを使用している場合は、以下の設定も適用されます。
このビジネス・サービスで使用する Java ゲートウェイ・サーバを制御する Java ゲートウェイ・サービスの構成名です。基盤となるアダプタ設定は JGService です。
この設定は、JDBC と接続中の SQL ゲートウェイ接続を使用している場合でも、すべての JDBC データ・ソースで必要です。JDBC 接続が機能するには、タイプが EnsLib.JavaGateway.ServiceOpens in a new tab のビジネス・サービスが存在する必要があります。ビジネス・サービスの SQL アダプタに対して、この構成項目の名前を指定する必要があります。その構成済み設定を使用して、このアダプタが管理する JVM に接続します。
JDBC ドライバ・クラス名です。
名前付き SQL ゲートウェイ接続を DSN として使用する場合、この値の指定は任意です。ただし、値を指定すると、名前付き JDBC SQL ゲートウェイ接続のプロパティよりも優先して適用されます。
JDBC ドライバ・クラス名のクラスパスです (Java ゲートウェイ・サービスで構成したクラスパス以外にも必要な場合)。
必要に応じて設定できる一連の SQL 接続属性オプション。ODBC の場合は、これらの形式は次のとおりです。
attr:val,attr:val
例 : AutoCommit:1
JDBC の場合は、これらの形式は次のとおりです。
attr=val;attr=val
例 : TransactionIsolationLevel=TRANSACTION_READ_COMMITTED
名前付き JDBC SQL ゲートウェイ接続を DSN として使用する場合、この値の指定は任意です。ただし、値を指定すると、名前付き JDBC SQL ゲートウェイ接続のプロパティよりも優先して適用されます。
受信クエリの指定
既定では、SQL ビジネス・サービスは、受信アダプタを使用してクエリを定期的に実行します。このアダプタからビジネス・サービスに結果が 1 行ずつ送信されます。
クエリの指定
ビジネス・サービスで使用される基本のクエリを指定するには、Query 設定を使用します。この設定では、基本のクエリ文字列を指定します。置き換え可能なパラメータの表現には、SQL 標準の ? を使用できます。これは、個別の設定で指定します。以下の例を検討します。
SELECT * FROM Customer
SELECT p1,p2,p3 FROM Customer WHERE updatetimestamp > ?
SELECT * FROM Sample.Person WHERE ID > ?
SELECT * FROM Sample.Person WHERE Age > ? AND PostalCode = ?
パラメータの指定
Parameters 設定では、クエリ文字列内の置き換え可能なパラメータを指定します。この設定は、以下のような、パラメータ値指定子のカンマ区切りリストになります。
value,value,value,...
指定する値ごとに、10 や Gotham City などの定数リテラル値を使用したり、以下のいずれかを参照したりできます。
-
アダプタのプロパティを参照できます。Parameters 設定内で、構文 %property_name を使用します。
-
ビジネス・サービスのプロパティを参照できます。構文 $property_name を使用します。
例えば、タイムスタンプを入れるために、LastTS という名前のプロパティをビジネス・サービス・クラスに追加できます。Parameters 設定では、プロパティの値を $LastTS として参照します。
-
&%LastKey などの特別な永続値を参照できます。この値には、アダプタによって最後に処理された行の IDKey 値が含まれています。
Parameters 設定でパラメータ名がアンパサンド (&) で始まる場合は、その名前は特別な永続値であると見なされます。
文字列データの最大長の指定
ビジネス・サービスの [VARCHAR LOB Boundary] 設定では、VARCHAR データ型を使用して InterSystems IRIS に格納できる文字列の最大長を指定します。ソース・データベース内に、指定した値より長い文字列を含む列があると、InterSystems IRIS では、LOB (ラージ・オブジェクト) データ型を使用してその文字列が格納されます。ビジネス・サービスの受信アダプタの対応するプロパティは、MaxVarCharLengthAsString です。
デフォルトの最大文字列長は 32767 です。値 -1 を指定すると、InterSystems IRIS の最大文字列長を使用できます。現在、これは 3641144 ですが、今後のバージョンで変更される可能性があります。InterSystems IRIS の最大文字列長より大きな値を指定した場合、InterSystems IRIS の現在の最大文字列長が使用されます。
SQL プロシージャ設定
ビジネス・サービスでストアド・プロシージャを呼び出す方法を制御する設定の詳細は、"プロシージャの詳細" を参照してください。
メッセージについて
外部データ・ソースから取得したデータを受信するために、カスタム・メッセージ・クラスを作成する必要はありません。既定では、SQL データはダイナミック・オブジェクト内にクエリの各列のプロパティと共に配置されます。このオブジェクトを記述する JSON 文字列は、Ens.StreamContainer のストリーム値として挿入されるので、その値をプロダクション経由で他のビジネス・ホストに送信できます。
カスタム・メッセージ・クラスを開発し、それを使用してデータをプロダクション経由で転送する場合は、プロパティ名が SQL クエリの列に完全に一致する必要があります。回避策として、SQL As キーワードを使用して、列の名前をプロパティ名に変更できます。メッセージ・クラスを定義したら、管理ポータルを開き、ビジネス・サービスの [メッセージ・クラス] 設定を使用して、そのメッセージ・クラスを選択します。
データ型とメッセージの詳細は、"メッセージの詳細" を参照してください。