问题描述
我正在从Java调用在DB2 for Z / OS中创建的存储过程。
我想在不使用架构名称的情况下调用存储过程。
我没有通过设置currentSchema
数据源属性来为所有其他SQL使用架构名称。
我知道对于存储过程,我必须设置currentFunctionPath
属性。但这是行不通的。我遇到了以下异常情况:
Caused by: com.ibm.db2.jcc.am.SqlException: DB2 SQL Error: SQLCODE=-805,SQLSTATE=51002,SQLERRMC=DB2T.MYSCHEMA.SYSSTAT.5359534C564C3031;DISTSERV;04,DRIVER=4.24.92
我使用的 Db2驱动程序:compile(group: 'com.ibm.db2.jcc',name: 'db2jcc4',version: '4.24.92')
DB2版本:12
有人知道这是一个已知问题,还是我错过了什么?
解决方法
请注意特殊寄存器(例如当前函数路径)和jdbc连接/会话属性之间的区别。
在连接字符串中,您可以使用特定语法指定特殊寄存器及其值。
特殊寄存器为“ CURRENT_PATH”,语法定义为here。
连接字符串的示例:
... ;specialRegisters=CURRENT_PATH=CURRENT CLIENT_USERID=x,SYSIBM;
其中x是包含您的存储过程的架构。
您可以根据需要设置特殊寄存器的值,并在所有例行调用中仔细进行测试,尤其是在具有多模式设置的情况下。
您还可以在连接到数据库之后设置特殊寄存器,只要您保留语法即可,尽管在这种情况下,除非您使用{{1},否则每次只能为每个特殊寄存器设置一个值。 }界面。有关详细信息,请参见上面的链接。