メソッド名は、この文OUTパラメータを宣言しませんを実行します。宣言1に使用{?=コール...}

アンナフィリップへ:

私はAWSオーロラのPostgreSQLへのOracleからデータベースを移行していました。私はすべてのパッケージは、PostgreSQLの機能として移行されていることを見ました。私は、PostgreSQLへのOracleスキーマ変換のためにAWS SCTを使用しました。Javaは、アプリケーションミドルウェアです。

たとえば、Oracleのパッケージと関連付けられたストアドプロシージャは、pk_audit.sp_get_auditとしてPostgreSQLとの変換pk_audit$sp_get_audit$シンボル。

私は、Webアプリケーションを実行すると、私のようなエラーが出ていメソッド名をこの文を実行するOUTパラメータを宣言していません。使用{?=コール...} 1を宣言する

私は、アプリケーションへのアクセスを持っていないが、アプリケーションチームは、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_auditPostgresの機能を改名pk_audit$sp_get_auditpk_audit.sp_get_auditはまだ問題に直面します。

私はPostgreSQLのDBに行うために必要なものはありますか?私は、おかげでアドバイスや助けを必要としています。

アンドレアス:

記載されているようにCallableStatement、ストアドプロシージャを呼び出すためのJDBC構文は、次のいずれかであります

{call ProcedureName(?, ...)}

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

パラメータのいずれかがOUTパラメーターにすることができます。戻り値は、当然のことながら、OUTパラメータのタイプです。

あなたは2つのパラメータを持つストアドプロシージャを持っていたし、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コードを変更することができない場合は、手順に戻ってあなたの機能を変換する必要があります。

おすすめ

転載: http://10.200.1.11:23101/article/api/json?id=389798&siteId=1