使用Iseries ODBC驱动程序时,有没有办法定义调用'程序名'?当我使用Iseries Access ODBC驱动程序对AS400运行命令时,as400的调用堆栈中的调用程序将程序名称显示为空白。我想定义一个,因为我们有一个需要知道谁是调用者的触发器。
答案 0 :(得分:3)
通过QZDASOINIT
作业代理ODBC连接。我不相信有一种方法可以识别触发触发器的特定连接(或程序)。
答案 1 :(得分:2)
正如JamesA所指出的,所有ODBC请求都通过QZDASOINIT
作业,因此您无法更改调用堆栈以确定调用者。
为了解决这个问题,DB2 for i包含了由ODBC驱动程序自动设置的客户端特殊寄存器(如果您愿意,可以覆盖它们),然后您的触发器可以使用。有关详细信息,请参阅:http://ibmsystemsmag.blogs.com/i_can/2009/10/i-can-use-client-special-registers.html
答案 2 :(得分:0)
这可能已经有一段时间了,仅从我6.1开始暴露。有关示例用法,请在i Nav“运行SQL脚本...”中运行此语句:
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 Reference讨论了新的“特殊寄存器”。