Nom de la méthode exécuter cette instruction ne déclare pas un paramètre OUT. Utilisez {? = Appel ...} déclarer un

Anna philip:

J'avais base de données migrée d'Oracle vers PostgreSQL AWS Aurora. J'ai vu que tous les paquets sont migrés en tant que fonction dans PostgreSQL. Je AWS SCT pour la conversion de schéma Oracle à postgreSQL. Java est le middleware d'application.

par exemple, un emballage et proc stockée associée à Oracle pk_audit.sp_get_auditconvertis en postgreSQL comme pk_audit$sp_get_auditun $symbole.

Quand je lance l'application Web, je reçois une erreur comme méthode Nom exécuter cette instruction ne déclare pas un paramètre OUT. Utilisez {? = Appel ...} déclarer un .

Je n'ai pas accès à l'application, mais l'équipe App fourni journal weblogic. Ça dit,

Method Name execute org.postgresql.util.PSQLException: This statement does not declare an OUT parameter.Use { ?= call ... } to declare one. org.postgresql.jdbc.PgCallableStatement.registerOutParameter(PgCallableStatement.java:205) weblogic.jdbc.wrapper.CallableStatement_org_postgresql_jdbc_PgCallableStatement.registerOutParameter(Unknown Source

Nom du package spécifié dans le code Java est pk_audit.sp_get_auditRebaptisé la fonction Postgres pk_audit$sp_get_auditpour pk_audit.sp_get_audittoujours face à la question.

Est-ce que je dois faire PostgreSQL DB? Je dois conseiller et aide, Merci.

Andreas:

Comme indiqué dans CallableStatementla syntaxe JDBC pour appeler des procédures stockées est l' un de ces

{call ProcedureName(?, ...)}

{? = call FunctionName(?, ...)}

Tous les paramètres peuvent être des paramètres OUT. La valeur de retour est bien sûr un type de paramètre OUT.

Donc, si vous aviez une procédure stockée avec 2 paramètres et le second paramètre était un paramètre OUT, vous coder comme:

String sql = "{call MyProcedure(?, ?)}";
try (CallableStatement stmt = conn.prepareCall(sql)) {
    stmt.setInt(1, p1);
    stmt.registerOutParameter(2, Types.VARCHAR);
    ...
}

Si cette même procédure est convertie en une fonction, vous coderez comme:

String sql = "{? = call MyFunction(?)}";
try (CallableStatement stmt = conn.prepareCall(sql)) {
    stmt.registerOutParameter(1, Types.VARCHAR);
    stmt.setInt(2, p1);
    ...
}

Si vous ne pouvez pas modifier le code Java qui fait l'appel, vous devez convertir vos fonctions de retour aux procédures.

Je suppose que tu aimes

Origine http://10.200.1.11:23101/article/api/json?id=389800&siteId=1
conseillé
Classement