x_pkg.proc_name という名前の Oracle パッケージで宣言されたプロシージャがあります。jdbc から java.sql.Statement.execute("BEGIN x_pkg.proc_name; END;"); を介して呼び出された場合 呼び出しはエラーで失敗します
java.sql.SQLException: ORA-06550: line 1, column 7:
PLS-00201: identifier 'x_pkg.proc_name' must be declared
ORA-06550: line 1, column 7:
PL/SQL: Statement ignored
上記のエラーは、プロシージャが指定されたパッケージで宣言されていないことを示しています。プロシージャの名前を x_pkg.proc_name_something に変更すると、jdbc 呼び出しは驚くほど成功します。これは非常に奇妙に思えます。プロシージャ宣言とその本体を削除して再度追加しようとしましたが、同じエラーが発生します。
これをさらにトラブルシューティングするための提案はありますか?
注 - プロシージャ コールは常に pl-sql コードを介して成功します。jdbcを介して実行すると失敗します。
更新: 「BEGIN schema_name.x_pkg.proc_name; END;」のようなスキーマ名を前に付けると、プロシージャ呼び出しが成功します。
いつスキーマ名にプレフィックスを付ける必要があり、いつ必要ではないのでしょうか?
更新 : 実際のパッケージ名は「COMMONS_UTILS」で、プロシージャ名は「SET_SESSION_NLS_PARAMS」です。「BEGIN COMMONS_UTILS.SET_SESSION_NLS_PARAMS; END;」の呼び出し JDBC で作成すると失敗します。プロシージャ名を「SET_SESSION_NLS_PARAMSX」に変更すると機能します。
更新: 実行する前にコンパイルすると、プロシージャコールが機能します。
"BEGIN EXECUTE IMMEDIATE 'ALTER PACKAGE COMMONS_UTILS COMPILE'; COMMONS_UTILS.SET_SESSION_NLS_PARAMS; END;"