To, co próbujesz, jest poprawną składnią, o ile wiem, ale w każdym razie nie zadziała, ponieważ typ zwracany jest zdefiniowany przez użytkownika, jak podejrzewasz.
Oto przykład z wbudowaną funkcją potokową. Oczywiście nazywanie tego lokalnie działa:
SELECT * FROM TABLE(dbms_xplan.display_cursor('a',1,'ALL'));
Zwroty:
SQL_ID: a, child number: 1 cannot be found
Wywołanie go przez łącze do bazy danych:
SELECT * FROM TABLE([email protected]('a',1,'ALL'));
nie powiedzie się z tym błędem:
ORA-30626: function/procedure parameters of remote object types are not supported
Prawdopodobnie otrzymujesz ORA-904, ponieważ link prowadzi do konkretnego schematu, który nie ma dostępu do pakietu. Ale w każdym razie to nie zadziała, nawet jeśli zdefiniujesz identyczny typ o tej samej nazwie w lokalnym schemacie, ponieważ z punktu widzenia Oracle nadal nie są tego samego typu.
Możesz oczywiście zdalnie odpytywać widok, więc jeśli istnieje dobrze zdefiniowany zestaw możliwych parametrów, możesz utworzyć jeden widok dla każdej kombinacji parametrów, a następnie zapytać o to, np.:
CREATE VIEW display_cursor_a_1_all AS
SELECT * FROM TABLE(dbms_xplan.display_cursor('a',1,'ALL'))
;
Jeśli zakres możliwych wartości parametrów jest zbyt duży, można utworzyć procedurę, która dynamicznie utworzy potrzebny widok przy dowolnym zestawie parametrów. Następnie za każdym razem, gdy chcesz wykonać zapytanie, masz do czynienia z dwuetapowym procesem:
EXECUTE [email protected](parameters)
SELECT * FROM [email protected];
Musisz wtedy zastanowić się, czy wiele sesji może wywołać to równolegle, a jeśli tak, jak zapobiec ich nadepnięciu na siebie.