私は、Oracleの2つの異なるインスタンスで2つの異なるOracleスキーマで作業しています。これらのスキーマ間でデータを転送するために、いくつかのタイプとタイプコレクションを定義しました。私が遭遇している問題は、型がまったく同じ定義(スキーマで両方のセットを作成するために使用される同じスクリプト)を持っていても、Oracleはそれらを互換性のない異なるオブジェクトと見なしていることです。
着信リモートタイプオブジェクトを同じローカルタイプとしてキャストすることを考えましたが、dblink間でタイプを参照することについてエラーが発生します。
基本的に、私は次のことを行っています。
DECLARE
MyType LocalType; -- note, same definition as the RemoteType (same script)
BEGIN
REMOTE_SCHEMA.PACKAGE.PROCEDURE@DBLINK( MyType ); -- MyType is an OUT param
LOCAL_SCHEMA.PACKAGE.PROCEDURE( MyType ); -- IN param
END;
REMOTEプロシージャコールはLocalTypeとRemoteTypeを異なるオブジェクトタイプとして扱うため、MyTypeを理解できないため、これは失敗します。
MyTypeの宣言も次のように試しました。
MyType REMOTE_SCHEMA.RemoteType@DBLINK;
しかし、dblink間でタイプを参照することについて別のエラーが発生します。タイプ間のキャストも機能しません。キャストするには、dblink全体でリモートタイプを参照する必要があるためです。同じ問題、同じエラーです。また、2つのインスタンス間で交差するオブジェクトとしてSYS.ANYDATAを使用しようとしましたが、同様のエラーが発生します。
何か案は?
更新:
同じOIDを使用してDBLINKの両側でオブジェクトタイプを宣言しようとしましたが(を使用して手動で取得SYS_OP_GUID()
)、Oracleは2つのオブジェクトを異なるものとして「認識」し、「間違った数またはタイプの引数」エラーをスローします。