У меня есть приложение Java, которое работает на Weblogic. Приложению требуется доступ к хранимой процедуре в базе данных 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(?)"
приводит к ошибке ...
Есть предложения? Спасибо!