Ich habe eine Java-Anwendung, die auf Weblogic ausgeführt wird. Die Anwendung muss auf eine gespeicherte Prozedur in einer DB2-Datenbank zugreifen. Daher wird eine JDBC-Datenquelle konfiguriert und über ihren JNDI-Namen zugegriffen.Weblogic: Rufen Sie gespeicherte DB2-Prozedur ohne Schemaname (Eigenschaft currentSchema)
Datenquelle:
ClassDriver: com.ibm.db2.jcc.DB2Driver
Properties:
user=MYUSER
DatabaseName=MYDB
Das folgende Beispiel funktioniert wie erwartet.
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();
Aber jetzt muss ich die gespeicherte Prozedur ohne den Schemanamen aufrufen und stattdessen eine JDBC-Treibereigenschaft verwenden.
Datenquelle:
ClassDriver: com.ibm.db2.jcc.DB2Driver
Properties:
user=MYUSER
DatabaseName=MYDB
db2.jcc.override.currentSchema=MYSCHEMA
com.ibm.db2.jcc.DB2BaseDataSource.currentSchema=MYSCHEMA
Der folgende SQL-Aufruf führt zu einem Fehler
// call stored procedure without schema name
String procName = "MYSTOREDPROCEDURE";
String sql = "CALL " + procName + "(?)";
callStmt = conn.prepareCall(sql);
SQL-Fehler:
SQLCODE = -440, ERROR: NO PROCEDURE BY THE NAME MYSTOREDPROCEDURE HAVING
COMPATIBLE ARGUMENTS WAS FOUND IN THE CURRENT PATH
Ich gehe davon aus, dass die "Current" Eigenschaften sind falsch.
Edit: Es sieht aus wie ich falsch lag: die Eigenschaft currentSchema
ist nicht das Problem! Die SQL-Anweisung gibt das korrekte Schema zurück (MYSCHEMA
). Die Frage ist nun, warum "CALL MYSCHEMA.MYSTOREDPROCEDURE(?)"
funktioniert und "CALL MYSTOREDPROCEDURE(?)"
zu einem Fehler führt ...
Irgendwelche Vorschläge? Vielen Dank!
Eigenschaft "currentFunctionPath" löste das Problem. Vielen Dank! – Hellen