Tengo una aplicación Java que se ejecuta en Weblogic. La aplicación necesita acceder a un procedimiento almacenado en una base de datos DB2, por lo tanto, un origen de datos JDBC se configura y se accede por su nombre JNDI.Weblogic: procedimiento DB2 llamado almacenado sin nombre de esquema (propiedad currentSchema)
Fuente de datos:
ClassDriver: com.ibm.db2.jcc.DB2Driver
Properties:
user=MYUSER
DatabaseName=MYDB
El siguiente ejemplo funciona como se esperaba.
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();
Pero ahora necesito llamar al procedimiento almacenado sin el nombre del esquema y usar una propiedad del controlador JDBC en su lugar.
Fuente de datos:
ClassDriver: com.ibm.db2.jcc.DB2Driver
Properties:
user=MYUSER
DatabaseName=MYDB
db2.jcc.override.currentSchema=MYSCHEMA
com.ibm.db2.jcc.DB2BaseDataSource.currentSchema=MYSCHEMA
los siguientes resultados de llamadas SQL en un error
// call stored procedure without schema name
String procName = "MYSTOREDPROCEDURE";
String sql = "CALL " + procName + "(?)";
callStmt = conn.prepareCall(sql);
error de SQL:
SQLCODE = -440, ERROR: NO PROCEDURE BY THE NAME MYSTOREDPROCEDURE HAVING
COMPATIBLE ARGUMENTS WAS FOUND IN THE CURRENT PATH
Asumo que las propiedades "CurrentSchema" están equivocados.
Editar: Parece que estaba equivocado: la propiedad currentSchema
no es el problema! La instrucción SQL "select current_schema fromsysibm.sysdummy1"
devuelve el esquema correcto (MYSCHEMA
). La pregunta ahora es por qué "CALL MYSCHEMA.MYSTOREDPROCEDURE(?)"
funciona y "CALL MYSTOREDPROCEDURE(?)"
resulta en un error ...
¿Alguna sugerencia? ¡Gracias!
La propiedad "currentFunctionPath" resolvió el problema. ¡Muchas gracias! – Hellen