sql >> Databáze >  >> RDS >> Oracle

Volání uložené funkce (která vrací pole uživatelem definovaného typu) v oracle přes odkaz na databázi

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.




  1. Zakažte všechna omezení tabulky v Oracle

  2. Může se aplikace pro Android připojit přímo k online databázi mysql

  3. Vytvořte a nakonfigurujte Oracle Linked Server v SQL Server

  4. Databáze:Zřetězené funkce