Nombre del método ejecutar esta sentencia no declara un parámetro OUT. Uso {?} = Llamada ... para declarar una

Anna a Felipe:

Yo había migrado la base de datos de Oracle a PostgreSQL AWS Aurora. Vi que todos los paquetes se migran como función en PostgreSQL. Solía AWS SCT para la conversión esquema de Oracle a PostgreSQL. Java es el middleware de aplicación.

por ejemplo, un paquete y proc almacenado asociado en Oracle pk_audit.sp_get_auditconvierten en PostgreSQL como pk_audit$sp_get_auditcon un $símbolo.

Cuando ejecuto la aplicación web, estoy recibiendo un error como método Nombre ejecutar esta sentencia no declara un parámetro OUT. Uso {?} = Llamada ... para declarar uno .

No tengo acceso a la aplicación, pero el equipo de aplicación proporcionado fotos Log WebLogic. Dice,

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

Nombre del paquete especificado en el código Java se pk_audit.sp_get_auditcambió el nombre del Postgres función pk_audit$sp_get_auditque pk_audit.sp_get_auditaún enfrenta el problema.

¿Hay que necesito algo que ver en PostgreSQL DB? Necesito consejo y ayuda, gracias.

Andreas:

Como se documenta en CallableStatementla sintaxis de JDBC para llamar a procedimientos almacenados es uno de estos

{call ProcedureName(?, ...)}

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

Cualquiera de los parámetros pueden ser parámetros OUT. El valor de retorno es, por supuesto, un tipo de parámetro OUT.

Por lo tanto, si usted tenía un procedimiento almacenado con parámetros 2 y el segundo parámetro es un parámetro OUT, deberá codificar como:

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

Si ese mismo procedimiento se convierte en una función, se codificaría como:

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

Si no puede cambiar el código Java que realiza la llamada, lo que necesita para convertir sus funciones de nuevo a los procedimientos.

Supongo que te gusta

Origin http://10.200.1.11:23101/article/api/json?id=389804&siteId=1
Recomendado
Clasificación