私は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_audit
Postgresの機能を改名pk_audit$sp_get_audit
にpk_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コードを変更することができない場合は、手順に戻ってあなたの機能を変換する必要があります。