Чи може хтось дати мені невелике пояснення про те, як і коли хтось повинен використовувати sys_refcursor?
Чи може хтось дати мені невелике пояснення про те, як і коли хтось повинен використовувати sys_refcursor?
Відповіді:
Курсор - вказівник на набір результатів для запиту. Повертаючи a, sys_refcursor
ви дозволяєте клієнту отримувати стільки чи кілька рядків із запиту, як цього потрібно. У програмах, що користуються важливістю, це може використовуватися для перегляду результатів.
Курсор може дозволити більшу гнучкість, ніж написання функції PL / SQL, яка повертає масив, оскільки клієнту повністю залежить, скільки рядків отримати і коли зупинити. Однак, я не знайшов багатьох випадків, коли ця додаткова гнучкість є корисною.
Варто зауважити, що sys_refcursor
набір слабко набраний, тому ви можете повернути покажчики на запити, які мають не лише відмінності від або де пункти, але й різні числа та типи стовпців. Крім того, ви можете використовувати сильно набраний курсор, де стовпці в наборі результатів закріплені.
Це дає змогу писати функції, які повертають різні запити, наприклад:
create function get_data ( type varchar2 ) return sys_refcursor as
ret_cur sys_refcursor;
begin
if type = 'EMP' then
open ret_cur for select * from emp;
elsif type = 'DEPT' then
open ret_cur for select * from dept;
end if;
return ret_cur;
end;
Однак якщо ви використовуєте sys_refcursor
для створення загальної функції "відкрити запит", як описано вище, ви, ймовірно, робите щось не так!
get_emps
та get_depts
функції
Як приклад можливостей: оскільки у спині є pl / sql, можна визначити об’єкт для подання рядка, визначити таблицю pl / sql цих об’єктів,
create type T_MY_TABLE as table of t_my_object;
і закінчуються с
OPEN p_recordset FOR select * from table( v_my_table );
Отже, замість того, щоб будувати монго, часто щільні та / або критичні прямі запити на таблиці бази даних, можна створити внутрішню таблицю і мати всю потужність pl / sql для її заселення. А клієнт, що збирає набір результатів, не мудріший. І змінити визначення внутрішньої таблиці простіше від управління pov, ніж зміни таблиці баз даних.
Також при використанні генераторів звітів, таких як Jasper, ви можете виштовхнути SQL зі звіту і в базу даних, а також просто зателефонувати в процедуру, щоб отримати набір записів, залишивши сторону звіту зосередитись на форматуванні.