はじめに
Interoperabilityを利用していれば、わざわざODBC接続用のロジックを組む必要はありません。
ただ、毎回Interoperabilityを利用できるとは限らないので、利用できない時の対応方法を知っておく必要があります。
ODBC接続で使用するロジックは、中々出番がないため忘れがちですよね。
今回は、ODBCで他サーバのIRISと接続するサンプルを作ってみました。
接続用のコネクションを作成する
ODBC接続する時は、「%Library.SQLGatewayConnection.cls」を使用します。
あちこち使いまわす事を考慮して、小さな関数にまとめました。
ClassMethod GetConnection(ByRef con As %SQLGatewayConnection, DSN As %String, USER As %String, PWD As %String, Timeout As %Integer = 90) As %Status
{
s sts = $$$OK
try {
s con = ##class(%SQLGatewayConnection).%New()
$$$ThrowOnError( con.Connect(DSN, USER, PWD, Timeout) )
} catch e {
s sts = e.AsStatus()
}
q sts
}
引数は、コネクションを受け取る「con」と、接続用の各種パラメータ「DSN(データソース名)」「USER(ユーザ名)」「PWD(パスワード)」、接続時のタイムアウト値「Timeout」になります。
使い方は、後ほどサンプルとあわせて説明します。
DSNを作成する
windowsの検索から「odbc」と入力して下さい。
「ODBCデータ ソース(64 ビット)」若しくは「ODBCデータ ソース(32 ビット)」が検索されます。
「64ビット」と「32ビット」どちらを利用するかは、環境にあわせて選択して下さい。
今回は、64ビットの方を使用します。
「ODBC データ ソース(64 ビット)」をクリックして下さい。
クリックすると、「ODBC データ ソース アドミニストレーター(64 ビット)」画面が起動するので、「システムDSN」タブをクリックして下さい。
「IRIS User」の64ビットが表示されていれば問題ありません。
クリックして「InterSystems ODBC データ ソースセットアップ」画面を起動させます。
下記を入力していきます。
- 名前 → 引数「DSN」に該当します
- ホストIP
- ポート(スーパーサーバーポート番号)
- 接続先のネームスペース
- ユーザ名 → 接続先のIRIS:ユーザ名
- パスワード → 接続先のIRIS:パスワード
入力が終わったら、念のため「テスト接続」を行って、入力に間違いがないか確認してみます。
接続テストが正常に終了したら、入力内容に問題はありません。
DSNの設定は完了になります。
コネクションとDNSを利用して、SQLを実行する
では、先ほど作成した「コネクション」「DSN」を利用して、簡単ですがSQLでデータを取得する処理を作成します。
ClassMethod get()
{
try {
s DSN = "Sample"
s USER = *******
s PWD = *******
$$$ThrowOnError( ..GetConnection(.con, DSN, USER, PWD))
s query = "select top 10 ID,startDate from developer_data.ODBCData"
s rs = ##class(%ResultSet).%New("%DynamicQueryGW:SQLGW")
$$$ThrowOnError( rs.Prepare(query, ,con) )
$$$ThrowOnError( rs.Execute() )
while ( rs.%Next( .sts ) ) {
q:$$$ISERR(sts)
w !,rs.%Get("ID"),",",rs.%Get("startDate")
}
$$$ThrowOnError( con.Disconnect() )
}catch e {
w !,$system.Status.DisplayError(e.AsStatus())
}
}
では作成した関数をターミナルで実行してみましょう。
d ##class(developer.ODBC).get()
ちゃんと結果が得られました。
後は接続先のデータと比較するだけですね。
接続先の管理ポータルから、同じクエリを実行して比較してみましょう。
味気ないデータですが、相違はない様です。
ODBC接続を利用して、他のIRISからデータが正常に取得できましたね!
おわりに
いかがだったでしょうか。
割と簡単な設定とロジックと設定で、他サーバのデータを取得することが出来ました。
今回のサンプルはIRISでしたが、ODBCもJDBCも大して変わらず接続する事が可能です。
いざ接続となった時に参考になれば幸いです!