我有一个在 Weblogic 上运行的 Java 应用程序。应用程序需要访问 DB2 数据库中的存储过程,因此 JDBC 数据源是通过其 JNDI 名称来配置和访问的。
数据源:
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(?)"
结果出现错误...
有什么建议么?谢谢!