gpt4 book ai didi

java - Weblogic:调用没有架构名称的 DB2 存储过程(属性 currentSchema)

转载 作者:塔克拉玛干 更新时间:2023-11-03 05:00:42 25 4
gpt4 key购买 nike

我有一个在 Weblogic 上运行的 Java 应用程序。应用程序需要访问 DB2 数据库中的存储过程,因此通过 JNDI 名称配置和访问 JDBC 数据源。

数据来源:

ClassDriver: com.ibm.db2.jcc.DB2Driver

Properties:
user=MYUSER
DatabaseName=MYDB

以下示例按预期工作。

Context env = null;
DataSource pool = null;

Hashtable ht = new Hashtable();
ht.put(Context.INITIAL_CONTEXT_FACTORY, "weblogic.jndi.WLInitialContextFactory");
ht.put(Context.PROVIDER_URL,"t3://myserver:7777");

env = new InitialContext(ht);

pool = (DataSource) env.lookup("jdbc/myjndiname");
conn = pool.getConnection();

// call stored procedure with schema name
String procName = "MYSCHEMA.MYSTOREDPROCEDURE";
String sql = "CALL " + procName + "(?)";
callStmt = conn.prepareCall(sql);

callStmt.setString(1, "1");
callStmt.execute();

但现在我需要调用没有架构名称的存储过程,而是使用 JDBC 驱动程序属性。

数据来源:

ClassDriver: com.ibm.db2.jcc.DB2Driver

Properties:
user=MYUSER
DatabaseName=MYDB
db2.jcc.override.currentSchema=MYSCHEMA
com.ibm.db2.jcc.DB2BaseDataSource.currentSchema=MYSCHEMA

下面的 SQL 调用导致错误

// call stored procedure without schema name
String procName = "MYSTOREDPROCEDURE";
String sql = "CALL " + procName + "(?)";
callStmt = conn.prepareCall(sql);

SQL 错误:

SQLCODE = -440, ERROR:  NO PROCEDURE BY THE NAME MYSTOREDPROCEDURE HAVING
COMPATIBLE ARGUMENTS WAS FOUND IN THE CURRENT PATH

我认为“currentSchema”属性是错误的。

编辑:看来我错了:属性 currentSchema 不是问题! SQL 语句 "select current_schema fromsysibm.sysdummy1" 返回正确的模式 (MYSCHEMA)。现在的问题是,为什么 "CALL MYSCHEMA.MYSTOREDPROCEDURE(?)" 有效而 "CALL MYSTOREDPROCEDURE(?)" 导致错误...

有什么建议吗?谢谢!

最佳答案

存储过程(和函数)解析不受 CURRENT SCHEMA 专用寄存器控制。它由 CURRENT PATH 专用寄存器控制。

因此,您可以:

  • 执行SQL语句SET CURRENT PATH = MYSCHEMA
    或者

  • 使用 currentFunctionPath JDBC 属性。

关于java - Weblogic:调用没有架构名称的 DB2 存储过程(属性 currentSchema),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2146343/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com