Iseries ODBC ドライバーを使用する場合、呼び出し元の「プログラム名」を定義する方法はありますか? Iseries Access ODBC ドライバーを使用して AS400 に対してコマンドを実行すると、as400 のコール スタック内の呼び出しプログラムでプログラム名が空白として表示されます。誰が呼び出し元かを知る必要があるトリガーがあるため、定義したいと思います。
3 に答える
QZDASOINIT
ODBC接続は、ジョブを介してプロキシされます。トリガーを起動した特定の接続(またはプログラム)を特定する方法はないと思います。
JamesA が指摘しているように、すべての ODBC 要求はQZDASOINIT
ジョブを通過するため、コール スタックを変更して呼び出し元を特定することはできません。
この問題を回避するために、DB2 for i には、ODBC ドライバーによって自動的に設定されるクライアント特殊レジスター (必要に応じてオーバーライドできます) が含まれており、トリガーで使用できます。詳しくは、http: //ibmsystemsmag.blogs.com/i_can/2009/10/i-can-use-client-special-registers.htmlを参照してください。
しばらくの間可能でしたが、i 6.1 以降でのみ公開されました。使用例として、i Nav 'Run SQL Scripts...' で次のステートメントを実行します。
select CURRENT CLIENT_APPLNAME, CURRENT CLIENT_PROGRAMID, CURRENT CLIENT_WRKSTNNAME from sysibm.sysdummy1
JDBC、OLE DB、CLI、または .NET データ プロバイダーを使用するアプリケーション開発者は、サポートを利用できます。また、特別なストアド プロシージャを呼び出して設定することもできます。
たとえば、IBMDASQL を使用すると、接続文字列に次のものが含まれる場合があります。
conn.Open "Provider=IBMDASQL; Data Source=MyAS400;" & _
"Client User ID=MYWINUSRID; Client WorkStation Name=MYWINPC; " & _
"Client Program ID=somepc.exe; Application Name=Sample for Audit"
SQL リファレンスでは、新しい「特殊レジスター」について説明しています。