ODBC での SQL ゲートウェイの使用法
SQL ゲートウェイを使用すると、JDBC および ODBC 経由で Caché から外部データベースにアクセスできます。SQL ゲートウェイの詳細は、"Caché SQL の使用法" の "SQL ゲートウェイの使用法" の章を参照してください。
以下の項目について説明します。
-
"外部ソースへの ODBC SQL ゲートウェイ接続の作成" — SQL ゲートウェイ用の ODBC 論理接続の定義の作成方法を説明します。
-
"プログラムによる ODBC SQL ゲートウェイの使用法" — ODBC 準拠のデータベースにプログラムでアクセスする方法について説明します。このオプションを使用すると、標準 SQL ゲートウェイ・ウィザードが提供している設定よりも詳細に接続を制御できます。
UNIX® システムでサードパーティ製共有ライブラリを使用する場合は、Caché LibPath パラメータを設定して LD_LIBRARY_PATH を定義する必要があります ("Caché パラメータ・ファイル・リファレンス" の “LibPath” を参照)。これは、特権を持たないユーザがパスを変更できないようにするためのセキュリティ対策です。
外部ソースへの ODBC SQL ゲートウェイ接続の作成
Caché では、外部データ・ソースへの接続の論理名である、SQL ゲートウェイ接続定義のリストが管理されます。各接続定義は、論理名 (Caché 内で使用するため)、データ・ソースへの接続情報、および接続を確立するときに使用するユーザ名とパスワードで構成されます。これらの接続は、%Library.sys_SQLConnection テーブルに格納されます。このテーブルのデータをエクスポートして、別の Caché インスタンスにインポートできます。
ODBC SQL ゲートウェイ接続の作成
ODBC 準拠のデータ・ソースにゲートウェイ接続を定義するには、以下の手順を実行します。
-
外部データベースに ODBC データ・ソース名 (DSN) を定義します。これを実行する方法については、外部データベースのドキュメントを参照してください。
-
管理ポータルで、システム管理, 構成, 接続性, SQLゲートウェイ接続 ページに進みます (フル・メニュー・パスは システム管理, 構成, 接続性, SQLゲートウェイ接続)。
-
[新規接続作成] をクリックします。
-
[ゲートウェイ接続] ページで、以下のフィールドの値を入力または選択します。
-
[タイプ] で [ODBC] を選択します。
-
[接続名] — Caché 内で使用する、接続の識別子名を指定します。
-
[DSN を選択してください] — 前に作成した DSN を選択します。ODBC SQL ゲートウェイでは DSN を使用しない接続はサポートされていないため、DSN を使用する必要があります。
-
[ユーザ] — 必要に応じて、接続の確立時に既定値として機能するアカウントの名前を指定します。
-
[パスワード] — 既定のアカウントに関連付けられたパスワードを指定します。
例えば、一般的な接続は以下の値を使用します。
設定 値 [タイプ] ODBC [接続名] ConnectionODBC1 [DSN を選択してください] MyAccessPlayground [ユーザ] DBOwner [パスワード] DBPassword この章で後述する “実装固有のオプション” も参照してください。
-
-
オプションで、値が有効かどうかをテストします。テストするには、[テスト接続] ボタンをクリックします。画面に、前の手順で入力した値を、有効な接続で使用できるかどうかを示すメッセージが表示されます。
-
名前付き接続を作成するには、[保存] をクリックします。
-
[閉じる] をクリックします。
SQL ゲートウェイ経由での Caché への ODBC 接続の作成
Caché には、ODBC データ・ソースとして使用できる ODBC ドライバがあります。つまり、Caché インスタンスは、それ自体または別の Caché インスタンスに ODBC および SQL ゲートウェイ経由で接続できます。具体的には、この接続は、1 つの Caché のネームスペースから別の Caché のネームスペースへの接続です。この方法で接続する場合は、他の外部データベースに接続するときと同じように、使用するデータベース・ドライバに関する接続詳細が必要です。このセクションでは基本的な情報を示します。
ODBC データ・ソースとしての Caché への接続
別の Caché インスタンス (Caché_B) を ODBC データ・ソースとして使用するように Caché インスタンス (Caché_A) を構成するには、以下の操作を実行します。
-
Caché_A を実行しているマシン上で、使用する Caché_B のネームスペースを表す DSN を作成します(DSN を作成するための OS 固有の手順については、“ODBC データ・ソースとしての InterSystems データベースの使用法 (Windows)” または “ODBC データ・ソースとしての InterSystems データベースの使用法 (UNIX®)” を参照してください。)
Tip:Caché をインストールするとインストーラによって自動的に DSN が作成されるため、Caché_B をこのマシンにインストールしたときに、既に適切な DSN が使用可能になっている場合があります。
-
Caché_A 内で、SQL ゲートウェイを使用して、DSN を使用する ODBC 接続を作成します。以下の詳細を指定します。
-
[タイプ] で [ODBC] を選択します。
-
[接続名] — Caché_A 内で使用する、接続の識別子を指定します。
-
[DSN を選択してください] — Caché_B で前に作成した DSN を選択します。
例えば、一般的な接続は以下の値を使用します。
設定 値 [タイプ] ODBC [接続名] Cache2Samples [DSN を選択してください] Cache2Samples Tip:[ユーザ] と [パスワード] の情報は DSN の一部なので、これらを指定する必要はありません。
-
-
[保存] をクリックします。
-
[閉じる] をクリックします。
実装固有のオプション
SQL ゲートウェイ接続を定義する前に、外部データベースとデータベース・ドライバの要件を理解しておく必要があります。これらの要件が接続の定義方法に影響を及ぼすためです。以下のオプションは、すべてのドライバ実装に適用されるわけではありません。
[レガシー outer join (Sybase) を有効に] オプションは、SQL ゲートウェイ接続でレガシーな外部結合の使用を有効にするかどうかを制御します。レガシーな外部結合では、SQL-92 規格より前の SQL 構文が使用されます。外部データベースがこのような結合をサポートしているかどうかを確認するには、そのデータベースのドキュメントを参照してください。
[長いデータ長が必要] オプションは、SQL ゲートウェイ接続でデータを結合する方法を制御します。このオプションの値は、データベース・ドライバの SQL_NEED_LONG_DATA_LEN 設定と一致している必要があります。この設定の値を確認するには、ODBC SQLGetInfo 関数を使用します。SQL_NEED_LONG_DATA_LEN が Y の場合は [長いデータ長が必要] オプションを選択し、それ以外の場合は選択を解除します。
[Unicode ストリームのサポート] オプションは、ストリームで SQL ゲートウェイ接続が Unicode データをサポートするかどうかを制御します。これらは、LONGVARCHAR または LONGVARBINARY タイプのフィールドです。
-
Sybase の場合はこのチェック・ボックスのチェックを外します。Sybase データベースを使用している場合は、SQL ゲートウェイ経由でアクセスするすべてのフィールドに UTF-8 データのみが含まれるようにする必要があります。
-
その他のデータベースの場合は、このチェック・ボックスにチェックを付けます。
[デフォルトで区切り識別子を使用しない] オプションは、生成されたルーチン内の識別子の形式を制御します。
SQL 区切り識別子をサポートしないデータベースを使用する場合は、このチェック・ボックスにチェックを付けます。これには現在、以下のデータベースが含まれます。
-
Sybase
-
Informix
-
MS SQL Server
他のデータベースを使用する場合は、チェック・ボックスのチェックを外します。すべての SQL 識別子が区切られます。
[COALESCE 使用] オプションは、クエリにパラメータ (?) が含まれる場合のクエリの処理方法を制御します。これは、クエリ・パラメータが NULL の場合にのみ適用されます。
-
[COALESCE 使用] を選択しない場合に、クエリ・パラメータが NULL のとき、クエリは対応する値が NULL となっているレコードのみを返します。例えば、以下の形式のクエリを考えてみます。
SELECT ID, Name from LinkedTables.Table WHERE Name %STARTSWITH ?
指定されたパラメータが NULL のとき、クエリは、値が NULL の名前を持つ行のみを返します。
-
[COALESCE 使用] を選択した場合、クエリは、COALESCE 関数呼び出し内の各パラメータを折り返します。これにより、NULL 値の処理方法が制御されます。
ここで、クエリ・パラメータが NULL のとき、クエリは基本的にはパラメータをワイルドカードとして扱います。前の例では、指定されたパラメータが NULL のとき、このクエリはすべての行を返します。これには、通常の ODBC クライアントの動作との一貫性があります。
このオプションを選択するかどうかは、ユーザの判断と COALESCE 関数が外部データベースでサポートされているかどうかによります。
外部データベースで COALESCE 関数がサポートされているかどうかを確認するには、そのデータベースのドキュメントを参照してください。
[複合 Row ID 内で変換] オプションでは、複合 ID を形成するときの文字以外の値の処理方法を制御します。データベースでサポートされているオプションを選択します。
-
[非文字値を変換しない] — このオプションでは、変換は実行されません。このオプションは、データベースで文字以外の値の文字値への連結がサポートされる場合にのみ適切です。
-
[CAST を使用する] — このオプションでは、CAST を使用して、文字以外の値が文字値に変換されます。
-
[{fn convert ...} を使用] — このオプションでは、{fn convert ...} を使用して、文字以外の値が文字値に変換されます。
すべての場合に、ID (または変換後の ID) の間に || を使用して ID が連結されます。
外部データベースでサポートされるオプションを確認するには、外部データベースのドキュメントを参照してください。
UNIX® の ODBC SQL ゲートウェイ・テスト・プログラムの使用法
完全な UNIX® Caché インストール内で、Caché からゲートウェイへのアクセスをテストする特別なプログラムを使用できます。
テスト・プログラムでは、既定の 8 ビットの iODBC 準拠のドライバ (libcacheodbc.so および cgate.so を使用します。サポートされている UNIX® プラットフォームで使用可能な Caché ODBC クライアント・ドライバと Caché SQL ゲートウェイ・ドライバの完全なリストは、“UNIX® システムでの ODBC のインストールと検証” の章にある “キー・ファイル名” を参照してください。
ゲートウェイ・テスト・プログラムは、install-dir/dev/odbc/samples/sqlgateway ディレクトリのファイルで構成されています。
-
gatewaytest.sh — テストを実行するシェル・スクリプト。このスクリプトは、(ODBC 初期化ファイルを検出できるように) ODBCINI 環境変数を定義し、ドライバ・マネージャの検索パスを設定し、samples という名前の DSN にアクセスしてルーチンを実行します。この DSN はサンプルの ODBC 初期化ファイルに定義されており、Caché SAMPLES ネームスペースを指します。
構成によっては、シェル・スクリプトを変更する必要がある場合があります。詳細は、“選択テスト用シェル・スクリプトの変更” のセクションを参照してください。
-
SQLGatewayTest.ro — iODBC および Caché ODBC クライアント・ドライバ libcacheodbc.so を使用して、Caché SAMPLES ネームスペースへのコールアウトを実行するルーチン。
以下の手順でテスト・プログラムを実行します。
-
install-dir/dev/odbc/samples/ に移動します。
-
以下を入力して、テスト・スクリプトを実行します。
./sqlgateway/gatewaytest.sh
gatewaytest.sh スクリプトは以下を実行します。
-
Caché セッションを開始して、SAMPLES ネームスペースの SQLGatewayTest ルーチンを実行します。
-
その後、このアプリケーション・ルーチンは、iODBC ドライバ・マネージャにリンクされている既定の Caché SQL ゲートウェイ・ドライバ (cgate.so) をロードします。
-
ドライバ・マネージャは ODBC 初期化ファイルの情報を使用してクライアント・ドライバをロードします。
-
その後、クライアント・ドライバはポート 1972 への TCP/IP 接続を確立し、ODBC 初期化ファイルの DSN 定義を使用して、Caché SAMPLES ネームスペースに接続されます。
-
ルーチンは以下のクエリを実行します。
SELECT * FROM SAMPLE.PERSON
-
その後、結果セットの最初の 10 行をフェッチします。
この例と、単純な select テストの相違点は、gatewaytest.sh では、最初の呼び出しを行う Caché プロセスが、クライアント・アプリケーションである点です。通常、Caché からのゲートウェイ呼び出しは、他のベンダのデータベースの DSN を呼び出します。
プログラムによる ODBC SQL ゲートウェイの使用法
標準 SQL ゲートウェイ・ウィザードで提供されないオプションが必要な場合、%SQLGatewayConnectionOpens in a new tab クラスを使用して ODBC 準拠のデータベースにプログラムでアクセスできます。ダイナミック・クエリ (結果セットを取得する) を実行することも、低レベルの ODBC プログラミングを実行することもできます。
このセクションは、ODBC の使用経験があるプログラマを対象としています。このドキュメントでは、ODBC 関数の詳細は説明しません。また、ObjectScript および InterSystems IDE に関する基本的な知識も必要です。
問題が発生した場合、ODBC のログを有効化してゲートウェイを監視できます (“ロギングと環境変数” を参照)。
外部データ・セットの作成および使用
外部データベースをクエリするデータ・セットを作成および使用するには、以下の操作を実行します。
-
%New メソッドを使用して、%SQLGatewayConnectionOpens in a new tab のインスタンスを作成します。
-
作成したインスタンスの Connect メソッドを呼び出し、ODBC データ・ソース名を指定する引数、および必要に応じて、ソースへのログインに必要なユーザ名とパスワードを渡します。
Connect メソッドには、以下のシグニチャがあります。
method Connect(dsn, usr, pwd, timeout) returns %Status
ここで dsn は、データ・ソースの DSN です。usr は、データ・ソースにログインできるユーザです。pwd は対応するパスワードです。timeout は、接続を待機する長さを指定します。
接続の詳細は、"ODBC プログラミングの実行" にあるセクションの “接続の管理” を参照してください。
-
%New メソッドを使用して %ResultSetOpens in a new tab のインスタンスを作成し、文字列引数 "%DynamicQueryGW:SQLGW" を指定します。
Note:これは、通常のダイナミック・クエリ ("%DynamicQuery:SQL") で使用する引数とは若干異なります。
-
データ・セットの Prepare メソッドを呼び出します。最初の引数は SQL クエリを構成する文字列、2 番目の引数は省略、3 番目の引数は %SQLGatewayConnectionOpens in a new tab のインスタンスである必要があります。
このメソッドはステータスを返すので、それをチェックする必要があります。
-
オプションとして、クエリで必要とする順序で引数を指定することにより、データ・セットの Execute メソッドを呼び出します。このメソッドはステータスを返すので、それをチェックする必要があります。
データ・セットを使用する場合は、通常、一度に 1 行ずつ検証します。%ResultSetOpens in a new tab のメソッドを使用して、指定した列の値などの情報を取得します。
次の行に進むには、Next メソッドを使用します。通常、最後に到達するまで、つまり Next が 0 を返すまで、すべての行で繰り返し処理を行います。エラーが発生した場合も、Next メソッドは 0 を返します。
以下に例を示します。
ClassMethod SelectAndWrite() as %Status
{
Set conn=##class(%SQLGatewayConnection).%New()
Set sc=conn.Connect("AccessPlayground","","")
If $$$ISERR(sc) do $System.Status.DisplayError(sc) quit
Set res=##class(%ResultSet).%New("%DynamicQueryGW:SQLGW")
Set sc=res.Prepare("SELECT * FROM PEOPLE",,conn)
If $$$ISERR(sc) do $System.Status.DisplayError(sc) quit
Set sc=res.Execute()
If $$$ISERR(sc) do $System.Status.DisplayError(sc) quit
While res.Next()
{ Write !,res.GetData(1)," ",res.GetData(2)," ",res.GetData(3)
}
Set sc=conn.Disconnect()
Quit sc
}
%ResultSetOpens in a new tab の詳細は、"Caché SQL の使用法" の “ダイナミック SQL の使用” を参照してください。%ResultSetOpens in a new tab のクラス・ドキュメントも参照してください。
ODBC プログラミングの実行
%ResultSetOpens in a new tab で十分に制御できない場合は、ODBC プログラミングを実行できます。%SQLGatewayConnectionOpens in a new tab クラスには、ODBC 関数に対応する一連のメソッドとその他のユーティリティ関数が用意されています。このクラスを使用すると、ODBC 準拠のデータベースに接続して、これを使用できます。その後、低レベルの ODBC プログラミングを実行できます。全手順は、以下のとおりです。
-
%New メソッドを使用して、%SQLGatewayConnectionOpens in a new tab のインスタンスを作成します。
-
作成したインスタンスの Connect メソッドを呼び出し、ODBC データ・ソース名を指定する引数、および必要に応じて、ソースへのログインに必要なユーザ名とパスワードを渡します。
接続の詳細は、“接続の管理” を参照してください。
-
AllocateStatement メソッドを呼び出して、文ハンドルを (参照により) 受け取ります。
-
この文ハンドルを引数として使用して、ゲートウェイ・インスタンスの他のメソッドを呼び出します。これらのメソッドのほとんどが、ODBC 関数を呼び出します。
このセクションでは、以下の項目について説明します。
-
"NULL 値および空の文字列" — NULL 値と空の文字列を表す場合の Caché と SQL の相違点
-
"ステータスの確認" — 処理のステータスを確認する方法
-
"接続の管理" — 外部データ・ソースへの接続を管理するためのプロパティとメソッド
-
"基本的なメソッド" — ODBC 関数のインタフェースとしてこのクラスで使用できる基本的なメソッド
-
"共有ライブラリに関する情報の取得" — 現在ロードされている共有ライブラリに関する情報を取得する方法 (Caché ODBC SQL ゲートウェイの場合)
-
"共有ライブラリのアンロード" — この共有ライブラリをアンロードする方法
-
"その他のメソッド" — %SQLGatewayConnectionOpens in a new tab クラスのその他のメソッドの使用方法
-
"例" — クエリを実行する簡単な例
このセクションでは、ユーザが ODBC のプログラミングに精通していることが前提となっています。
NULL 値および空の文字列
この章で説明するメソッドを使用する場合、Caché と SQL との間には以下の重要な相違点があることに留意してください。
-
SQL では、"" は、空の文字列を表します。
-
Caché では、"" は NULL です。
-
Caché では、$char(0) は空の文字列です。
ステータスの確認
%SQLGatewayConnectionOpens in a new tab のメソッドのほとんどはステータスを返すので、それを確認する必要があります。以下のプロパティとメソッドを使用してステータス情報を確認することもできます。
前回の呼び出し (ある場合) による SQL コードの返り値が含まれます。
前回の呼び出しのステータスを示します。これは、以下のいずれかです。
-
0 – 成功
-
-1 - SQL エラー
-
-1000 -重大なエラー
method GetLastSQLCode() returns %Integer
この呼び出しが SQL コードを返さない場合 (SQLGetData を使用した場合など) は、前回の呼び出しの SQL コードを返します。
method GatewayStatusGet() returns %Integer
前回の呼び出しのエラー・コードを返します。この呼び出しはエラー・コードを初期化しないため、複数回呼び出すことができます。前述の GatewayStatus プロパティに関する注記を参照してください。
接続の管理
%SQLGatewayConnectionOpens in a new tab クラスには、外部データ・ソースへの接続の管理に使用できるプロパティとメソッドが用意されています。
接続先の、ODBC 準拠のデータ・ソースのデータ・ソース名。
データ・ソースにログインするためのユーザ名。
関連付けられているパスワード。
現在の接続では、ODBC 準拠のデータ・ソースが処理されます。
method Connect(dsn, usr, pwd, timeout) returns %Status
DSN への接続を確立します。ユーザ名とパスワードが両方とも空のとき、このメソッドは ODBC 関数 SQLDriverConnect を呼び出します。その呼び出しが成功しないとき、またはユーザ名とパスワードを指定したとき、このメソッドは ODBC関数 SQLConnect を呼び出します。
timeout パラメータが 0 以外の場合、まず、SQLSetConnectAttr が呼び出されて、SQL_ATTR_LOGIN_TIMEOUT が設定されます。
method GetConnection(conn, timeout) returns %Status
接続を確立します。このメソッドは、DSN、ユーザ名、およびパスワードを指定する Caché 構成からのエントリを使用します。
method SetConnectOption(opt, val) returns %Status
ODBC 関数 SQLSetConnectAttr を呼び出します。整数値のみがサポートされます。opt 引数の整数値は、sql.h ヘッダ・ファイルおよび sqlext.h ヘッダ・ファイルから取得することもできます。
method Disconnect() returns %Status
接続を切断します。
Basic メソッド
以下のテーブルは、サポートされる ODBC 関数の一覧です。これらの関数にアクセスするメソッドも示しています。メソッドの引数、アクション、および返り値の詳細は、%SQLGatewayConnectionOpens in a new tab のクラス・リファレンスを参照してください。
ODBC 関数 | この関数を呼び出すメソッド |
---|---|
SQLAllocHandle | AllocateStatement() |
SQLBindParameter | BindParameter() |
SQLCloseCursor | CloseCursor() |
SQLColAttribute | DescribeCols() |
SQLColumns | Columns() |
SQLColumnsW | ColumnsW() |
SQLDescribeCols | DescribeCols() |
SQLDescribeParam | DescribeParam() |
SQLDiagRec | GetErrorList() |
SQLEndTran | Transact() |
SQLExecute | Execute() |
SQLFetch | Fetch() |
SQLFreeHandle | DropStatement() |
SQLFreeStmt | UnbindParameters() |
SQLGetData | GetData() |
SQLGetDataW | GetDataW() |
SQLGetInfo | GetInfo() |
SQLMoreResults | MoreResults() |
SQLNumParams | DescribeParameters() |
SQLParamData | ParamData() |
SQLPrepare | Prepare() |
SQLPrepareW | PrepareW() |
SQLPrimaryKeys | PrimaryKeys() |
SQLPrimaryKeys | PrimaryKeysW() |
SQLProcedureColumns | ProcedureColumns() |
SQLProcedureColumnsW | ProcedureColumnsW() |
SQLProcedures | Procedures() |
SQLPutData | PutData() |
SQLPutDataW | PutDataW() |
SQLRowCount | RowCount() |
SQLSetConnectAttr | SetConnectOption() |
SQLSetStmtAttr | SetStmtOption() |
SQLSpecialColumns | SpecialColumns() |
SQLSpecialColumnsW | SpecialColumnsW() |
SQLTables | Tables() |
SQLTablesW | TablesW() |
共有ライブラリのアンロード
%SQLGatewayConnectionOpens in a new tab クラスには、ODBC SQL ゲートウェイの共有ライブラリのアンロードに使用できるメソッドが用意されています。
method UnloadDLL() returns %Status
プロセス・メモリから共有ライブラリをアンロードします。
その他のメソッド
%SQLGatewayConnectionOpens in a new tab クラスには、以下のようなその他のユーティリティ・メソッドが用意されています。
method FetchRows(hstmt, Output rlist As %List, nrows As %Integer) returns %Status
所定の接続ハンドルに指定されている行数を (参照により) 返します。ここでは、hstmt がその接続ハンドルです。これは、(参照により) AllocateStatement(). から返されます。また、rlist は、返される行リストです。これは、Caché の $list の 1 つです。リストの各アイテムには行が 1 つ含まれています。データがない場合 (SQL_CODE = 100)、フェッチは成功したと見なされますが、返されるリストは空です。
基本的に、このメソッドはテストに使用すると便利です。文字フィールドを最大 120 文字に切り捨てるので、1 行に収まるフィールド数が多くなります。切り捨てられていないデータが必要な場合は、代わりに GetData() を使用します。
method GetOneRow(hstmt, ByRef row) returns %Status
所定の接続ハンドルの次の行を (参照により) 返します。ここでは、hstmt がその接続ハンドルです。これは、(参照により) AllocateStatement(). から返されます。また、row は返される行で、Caché の $list の 1 つです。リストの各アイテムにはフィールドが 1 つ含まれています。データがない場合 (SQL_CODE = 100)、フェッチは成功したと見なされますが、返されるリストは空です。
基本的に、このメソッドはテストに使用すると便利です。文字フィールドを最大 120 文字に切り捨てるので、1 行に収まるフィールド数が多くなります。切り捨てられていないデータが必要な場合は、代わりに GetData() を使用します。
method GetParameter(hstmt, pnbr, ByRef value) returns %Status
指定したパラメータの現在の値を (参照により) 返します。ここで、hstmt は AllocateStatement() から (参照により) 返される接続ハンドルで、pnbr はパラメータの順序数です。
method SetParameter(hstmt, pvalue, pnbr) returns %Status
以前に結合したパラメータの値を設定します。ここで、hstmt は AllocateStatement() から (参照により) 返される接続ハンドルで、pvalue は使用する値で、pnbr はパラメータの順序数です。パラメータは、$list 形式で格納されます。割り当てられているバッファが不十分な場合は、新しいバッファが割り当てられます。
例
以下に、クエリを実行する簡単な例を示します。
ClassMethod ExecuteQuery(mTable As %String)
{
set mDSN="DSNtest"
set mUsrName="SYSDBA"
set mUsrPwd="masterkey"
set mx=##class(%SQLGatewayConnection).%New()
set status=mx.Connect(mDSN,mUsrName,mUsrPwd)
if $$$ISERR(status) do $System.Status.DisplayError(status) quit $$$ERROR()
set hstmt=""
set status=mx.AllocateStatement(.hstmt)
if $$$ISERR(status) do $System.Status.DisplayError(status) quit $$$ERROR()
set status=mx.Prepare(hstmt,"SELECT * FROM "_mTable)
if $$$ISERR(status) do $System.Status.DisplayError(status) quit $$$ERROR()
set status=mx.Execute(hstmt)
if $$$ISERR(status) do $System.Status.DisplayError(status) quit $$$ERROR()
quit mx.Disconnect()
}