J'ai la procédure stockée suivante définie:Comment utiliser un paramètre IN OUT CLOB défini dans un processus stocké dans Oracle JDBC?
CREATE OR REPLACE PROCEDURE NOTIFY_INSERT (
FLAG IN VARCHAR2,
MESSAGE IN OUT CLOB,
SEQ_NO OUT NUMBER
)
AS
BEGIN
...
END;
Maintenant, je suis en train d'appeler cette procédure stockée dans JDBC. Cependant, j'obtiens une exception disant "java.sql.SQLException: Parameter Type Conflict". Ceci est soulevé de la ligne
call.execute();
Je devine qu'il a quelque chose à voir avec le second paramètre, qui est un CLOB.
Est-ce que quelqu'un a une idée de ce que je fais mal?
Merci pour votre aide.
Connection connection = dataSource.getConnection();
CallableStatement call = null;
try {
call = connection.prepareCall("{ call NOTIFY_INSERT (?,?,?) }");
call.setString(1, flag);
call.registerOutParameter(2, Types.CLOB);
call.setString(2, message);
call.registerOutParameter(3, Types.NUMERIC);
call.execute();
sequenceNo = call.getLong(3);
message = call.getString(2);
} catch (SQLException e) {
e.printStackTrace();
} finally {
if (call != null) {
try { call.close(); } catch (SQLException sqle) {}
}
}
JDBC Exception:
java.sql.SQLException: Parameter Type Conflict
at oracle.jdbc.driver.OraclePreparedStatement.processCompletedBindRow(OraclePreparedStatement.java:2480)
at oracle.jdbc.driver.OraclePreparedStatement.executeInternal(OraclePreparedStatement.java:4356)
at oracle.jdbc.driver.OraclePreparedStatement.execute(OraclePreparedStatement.java:4595)
at oracle.jdbc.driver.OracleCallableStatement.execute(OracleCallableStatement.java:10100)
at oracle.jdbc.driver.OraclePreparedStatementWrapper.execute(OraclePreparedStatementWrapper.java:5693)
at org.apache.commons.dbcp.DelegatingPreparedStatement.execute(DelegatingPreparedStatement.java:172)
at org.apache.commons.dbcp.DelegatingPreparedStatement.execute(DelegatingPreparedStatement.java:172)
Je dois encore tester cette solution, mais elle semble être la bonne solution. Je vous ferai savoir si je suis capable de le faire fonctionner ... –
@LateDownvoter: Pourquoi le downvote? Et pourquoi 1 mois et demi plus tard? – rgettman
Je ne sais pas qui downvoted, mais j'ai voté. C'était la bonne réponse. –