Oracle
 sql >> Baza danych >  >> RDS >> Oracle

Wywołanie funkcji przechowywanej (która zwraca tablicę typu zdefiniowanego przez użytkownika) w Oracle poprzez łącze do bazy danych

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.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Jaka jest główna różnica między Varchar2 a char

  2. PreparedStatement i setTimestamp w Oracle jdbc

  3. Dlaczego klauzula Oracle IN ma limit 1000 tylko dla danych statycznych?

  4. TO_DSINTERVAL() Funkcja w Oracle

  5. Jak działa klauzula „w” w Oracle?