To, co zkoušíte, je správná syntaxe, pokud vím, ale v žádném případě by to nefungovalo, protože návratový typ je definován uživatelem, jak se domníváte.
Zde je příklad s vestavěnou zřetězenou funkcí. Místní volání samozřejmě funguje:
SELECT * FROM TABLE(dbms_xplan.display_cursor('a',1,'ALL'));
Vrátí:
SQL_ID: a, child number: 1 cannot be found
Volání přes odkaz na databázi:
SELECT * FROM TABLE([email protected]('a',1,'ALL'));
selže s touto chybou:
ORA-30626: function/procedure parameters of remote object types are not supported
Možná získáváte ORA-904, protože odkaz vede na konkrétní schéma, které nemá přístup k balíčku. Ale v žádném případě to nebude fungovat, i když ve svém místním schématu definujete identický typ se stejným názvem, protože z pohledu Oracle stále nejde o stejný typ.
Pohled můžete samozřejmě dotazovat na dálku, takže pokud existuje dobře definovaná sada možných parametrů, můžete vytvořit jeden pohled pro každou kombinaci parametrů a poté se dotazovat, např.:
CREATE VIEW display_cursor_a_1_all AS
SELECT * FROM TABLE(dbms_xplan.display_cursor('a',1,'ALL'))
;
Pokud je rozsah možných hodnot parametrů příliš velký, můžete vytvořit proceduru, která vytvoří potřebný pohled dynamicky na základě jakékoli sady parametrů. Poté máte k dispozici dvoustupňový proces pokaždé, když chcete provést dotaz:
EXECUTE [email protected](parameters)
SELECT * FROM [email protected];
Musíte se pak zamyslet nad tím, zda by to nemohlo nazývat více relací paralelně, a pokud ano, jak jim zabránit, aby na sebe šlapali.