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

Връща редове с данни от pl/sql блок

Анонимен блок не може да върне нищо. Можете да присвоите стойности на променлива за свързване, включително тип колекция или референтен курсор, вътре в блока. Но колекцията трябва да бъде дефинирана, както и декларирана, извън блока. Тоест, трябва да е тип, който можете да използвате в обикновен SQL, а не нещо, дефинирано в PL/SQL. В момента използвате PL/SQL тип, който е дефиниран в блока, и променлива, която също е декларирана в блока - така че е извън обхвата на клиента и също не би бил валиден тип извън него . (Също така не е необходимо да се инициализира, но това е незначителен проблем).

В зависимост от това как наистина ще се използва, една опция е да използвате референтен курсор и можете да декларирате и покажете това чрез SQL*Plus или SQL Developer с variable и print команди. Например:

variable rc sys_refcursor

begin
  open :rc for ( select ... /* your cursor statement */ );
end;
/

print rc

Можете да направите нещо подобно от клиентско приложение, напр. има функция, връщаща референтен курсор или процедура с изходящ параметър, който е референтен курсор, и обвържете това от приложението. След това итерирайте върху референтния курсор като набор от резултати. Но подробностите зависят от езика, който използва вашето приложение.

Друг вариант е да имате конвейерна функция, която връща тип таблица - отново дефинирана на ниво SQL (с create type ) не в PL/SQL - което може да изразходва по-малко ресурси от колекция, която се връща наведнъж.

Но трябва да се запитам защо го правиш. Казахте, че „копаенето за по-късни партиди отнема значително повече време“, което звучи така, сякаш използвате механизъм за пейджинг в заявката си, генерирайки номер на ред и след това избирайки диапазон от 100 в него. Ако вашият клиент/приложение иска да получи всички редове, тогава би било по-лесно да имате едно изпълнение на заявка, но извличане наборът от резултати в партиди.

За съжаление, без никаква информация за приложението, това са само спекулации...



  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 в SSRS:PLS-00306:грешен номер или типове аргументи при извикване на

  3. Oracle NLS_DATE_FORMAT не работи правилно

  4. Java - намерете първата причина за изключение

  5. Пренаредете колоните на таблицата в Oracle