私の知る限り、あなたが試しているのは正しい構文ですが、いずれにせよ、ご想像のとおり、戻り型がユーザー定義であるため、機能しません。
パイプライン関数が組み込まれている例を次に示します。もちろん、ローカルで呼び出すことは機能します:
SELECT * FROM TABLE(dbms_xplan.display_cursor('a',1,'ALL'));
返品:
SQL_ID: a, child number: 1 cannot be found
データベースリンクを介して呼び出す:
SELECT * FROM TABLE([email protected]('a',1,'ALL'));
このエラーで失敗します:
ORA-30626: function/procedure parameters of remote object types are not supported
リンクがパッケージにアクセスできない特定のスキーマに移動するため、ORA-904を取得している可能性があります。ただし、いずれの場合も、ローカルスキーマで同じ名前で同じタイプを定義したとしても、Oracleの観点からは同じタイプではないため、これは機能しません。
もちろん、ビューをリモートでクエリすることもできるため、可能なパラメータの明確なセットがある場合は、パラメータの組み合わせごとに1つのビューを作成し、それをクエリできます。例:
CREATE VIEW display_cursor_a_1_all AS
SELECT * FROM TABLE(dbms_xplan.display_cursor('a',1,'ALL'))
;
可能なパラメーター値の範囲が大きすぎる場合は、パラメーターのセットを指定して、必要なビューを動的に作成するプロシージャーを作成できます。次に、クエリを実行するたびに2段階のプロセスがあります。
EXECUTE [email protected](parameters)
SELECT * FROM [email protected];
次に、複数のセッションがこれを並行して呼び出す可能性があるかどうか、もしそうであれば、それらが互いに踏まないようにする方法を検討する必要があります。