方法名称 execute 此语句不声明 OUT 参数。使用 { ?= call ... } 声明一个
method Name execute This statement does not declare an OUT parameter. Use { ?= call ... } to declare one
我已将数据库从 Oracle 迁移到 AWS Aurora PostgreSQL。我看到所有的包都被迁移为 PostgreSQL 中的函数。我使用 AWS SCT 将 Oracle 模式转换为 postgreSQL。 Java为应用中间件
例如,
Oracle pk_audit.sp_get_audit
中的一个包和关联的存储过程转换为带有 $
符号的 postgreSQL pk_audit$sp_get_audit
。
当我 运行 Web 应用程序时,我收到类似 method Name execute This statement does not declare an OUT parameter 的错误。使用 { ?= call ... } 声明 one 。
我无权访问该应用程序,但应用程序团队提供了 weblogic 日志。它说,
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
Java代码中指定的包名是pk_audit.sp_get_audit
将 Postgres 函数 pk_audit$sp_get_audit
重命名为 pk_audit.sp_get_audit
仍然面临问题。
我需要在 PostgreSQL DB 中做些什么吗?
我需要建议和帮助,谢谢。
如 CallableStatement
中所述,调用存储过程的 JDBC 语法就是其中之一
{call ProcedureName(?, ...)}
{? = call FunctionName(?, ...)}
任何参数都可以是OUT参数。 return值当然是一种OUT参数。
因此,如果您有一个带有 2 个参数的存储过程并且第二个参数是一个 OUT 参数,您可以将其编码为:
String sql = "{call MyProcedure(?, ?)}";
try (CallableStatement stmt = conn.prepareCall(sql)) {
stmt.setInt(1, p1);
stmt.registerOutParameter(2, Types.VARCHAR);
...
}
如果将相同的过程转换为函数,您可以将其编码为:
String sql = "{? = call MyFunction(?)}";
try (CallableStatement stmt = conn.prepareCall(sql)) {
stmt.registerOutParameter(1, Types.VARCHAR);
stmt.setInt(2, p1);
...
}
如果无法更改 Java 进行调用的代码,则需要将函数转换回过程。
我已将数据库从 Oracle 迁移到 AWS Aurora PostgreSQL。我看到所有的包都被迁移为 PostgreSQL 中的函数。我使用 AWS SCT 将 Oracle 模式转换为 postgreSQL。 Java为应用中间件
例如,
Oracle pk_audit.sp_get_audit
中的一个包和关联的存储过程转换为带有 $
符号的 postgreSQL pk_audit$sp_get_audit
。
当我 运行 Web 应用程序时,我收到类似 method Name execute This statement does not declare an OUT parameter 的错误。使用 { ?= call ... } 声明 one 。
我无权访问该应用程序,但应用程序团队提供了 weblogic 日志。它说,
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
Java代码中指定的包名是pk_audit.sp_get_audit
将 Postgres 函数 pk_audit$sp_get_audit
重命名为 pk_audit.sp_get_audit
仍然面临问题。
我需要在 PostgreSQL DB 中做些什么吗? 我需要建议和帮助,谢谢。
如 CallableStatement
中所述,调用存储过程的 JDBC 语法就是其中之一
{call ProcedureName(?, ...)}
{? = call FunctionName(?, ...)}
任何参数都可以是OUT参数。 return值当然是一种OUT参数。
因此,如果您有一个带有 2 个参数的存储过程并且第二个参数是一个 OUT 参数,您可以将其编码为:
String sql = "{call MyProcedure(?, ?)}";
try (CallableStatement stmt = conn.prepareCall(sql)) {
stmt.setInt(1, p1);
stmt.registerOutParameter(2, Types.VARCHAR);
...
}
如果将相同的过程转换为函数,您可以将其编码为:
String sql = "{? = call MyFunction(?)}";
try (CallableStatement stmt = conn.prepareCall(sql)) {
stmt.registerOutParameter(1, Types.VARCHAR);
stmt.setInt(2, p1);
...
}
如果无法更改 Java 进行调用的代码,则需要将函数转换回过程。