db2 - currentFunctionPath 属性不适用于我的 Java 存储过程
问题描述
我正在从 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”,语法在这里定义。
连接字符串的示例:
...;specialRegisters=CURRENT_PATH=CURRENT CLIENT_USERID=x,SYSIBM;
其中 x 是包含您的存储过程的架构。
您可以根据需要设置特殊寄存器的值,并在所有例行调用中仔细测试它,尤其是在您有多模式设置的情况下。
您也可以在连接到数据库后设置特殊寄存器,只要您保留语法,尽管在这种情况下它限制您一次为每个特殊寄存器设置一个值,除非您使用DB2DataSource.setSpecialRegisters
接口。有关详细信息,请参阅上面的链接。
推荐阅读
- python - 从字符串python中提取年龄
- tensorboard - 什么是 hp.Discrete 和 hp.Realinterval?我可以在 hp.realinterval 中包含更多值而不仅仅是 2 吗?
- c# - 用 linq 替换两个 foreach 循环
- symfony - 来自常量的 Symfony 多路由需求
- windows - 将 CMAKE_SYSTEM_NAME 设置为 Generic 后,CMAKE_INSTALL_PREFIX 未添加到 CMAKE_SYSTEM_PREFIX_PATH
- node.js - NodeJS Mongoose 将事件插入到 public/index.html
- c# - 在 .net core 3.0 上运行集成服务 SSIS
- spring-boot - Spring Boot 应用程序不会将日志写入 Wildfly 14 上的日志文件
- javascript - javascript中有没有办法避免在逻辑表达式中重复相同的变量?
- asp.net-core-mvc - 将多个 Get 参数传递给 WebApi