Oracle
 sql >> база данни >  >> RDS >> Oracle

Извикване на съхранена функция (която връща масив от дефиниран от потребителя тип) в oracle през връзка към база данни

Това, което опитвате, е правилният синтаксис, доколкото знам, но във всеки случай няма да работи, тъй като типът на връщане е потребителски дефиниран, както подозирате.

Ето пример с вградена конвейерна функция. Извикването му локално работи, разбира се:

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.

Разбира се, можете да направите заявка за изглед от разстояние, така че ако има добре дефиниран набор от възможни параметри, можете да създадете един изглед за всяка комбинация от параметри и след това да го заявите, напр.:

CREATE VIEW display_cursor_a_1_all AS
  SELECT * FROM TABLE(dbms_xplan.display_cursor('a',1,'ALL'))
  ;

Ако обхватът на възможните стойности на параметрите е твърде голям, можете да създадете процедура, която създава необходимия изглед динамично при даден набор от параметри. След това имате процес в две стъпки всеки път, когато искате да изпълните заявката:

EXECUTE  [email protected](parameters)

SELECT * FROM [email protected];

След това трябва да помислите дали няколко сесии могат да извикат това паралелно и ако е така, как да им попречите да стъпват една върху друга.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. как да създадете таблица в oracle

  2. Как да експортирате резултатите от заявката на Oracle в JSON файл, когато използвате SQLcl

  3. Как да получите тримесечие от дата в Oracle?

  4. Oracle:Ако таблица съществува

  5. Как да използвам променливи в Oracle SQL Developer?