Я не мог придумать практическую ситуацию для использования явных курсоров в коде PL/SQL. Кто-нибудь может поделиться некоторыми сценариями? Благодаря!Практические примеры использования явного курсора оракула
ответ
Если курсор используется более одного раза в программном блоке, явный курсор позволяет запрограммировать SQL один раз, что хорошо для обслуживания.
Если наш код использует один и тот же SQL более одного раза, мы можем пересмотреть наш дизайн. – APC
Но использование одного и того же SQL более одного раза не обязательно плохой дизайн. – user272735
Существует два ясных варианта использования для явных курсоров.
Первый, когда мы хотим, чтобы исследовать на наличие записи и обработки результатов в основном потоке нашего кода:
open emp_cur (p_empno);
fetch emp_cur into l_emp_rec;
if emp_cur%notfound then
...
Это может быть аккуратнее тогда
begin
select e.* into l_emp_rec
from emp e
where e.empno = p_empno;
....
exception
when no_data_found then
...
Кроме от чего бы то ни было, какие другие части нашей программы могли бы бросить no_data_found
?
Другое дело, когда мы хотим использовать массовый сбор с предложением LIMIT (и почти наверняка мы хотим использовать предложение LIMIT, когда мы делаем массовую сборку). Так
open big_cursor;
loop
fetch big_cursor bulk collect into l_array limit 1000;
exit when l_array.count() = 0;
for idx in 1..l_array.count() loop
...
Явные курсоры ввести накладные расходы в наш код, поэтому они воспринимаются как неуклюжий и неэффективный. Но это не всегда так. Фактически, если мы закодируем инструкцию массового сбора с неявным курсором, Oracle будет оптимизировать это, чтобы использовать предложение LIMIT со значением 100. Это не плохой дефолт, но, вероятно, мы сможем получить лучшую производительность с более высоким значением 1000, 5000 , даже 10000. Таким образом, контроль над значением LIMIT позволяет использовать явный курсор.
Короче говоря, мы должны использовать неявные курсоры, когда будем рады, что Oracle примет контрольные решения (что очень много времени, довольно умный Oracle). Но мы должны использовать явные курсоры, когда нам нужно осуществлять контроль над поведением нашей программы.
Я с тобой здесь - я почти всегда использую явные курсоры (единственный раз, когда я этого не делаю, когда я обновляю чужой код, и я хочу сохранить согласованный стиль). Но я не знал, что вы можете использовать только предложение LIMIT для явного курсора. Я видел много примеров, которые * используют * LIMIT - вы говорите, что лимит игнорируется в пользу значения по умолчанию? –
Вы явно не указали очень удобный [rowtype] (http://docs.oracle.com/cd/E11882_01/appdev.112/e25519/composites.htm#CIHHHGAE) -трибут, который может использоваться только с явными курсорами , То есть 'l_emp_rec emp_cur% rowtype;'. – user272735
- 1. Практические примеры использования ConcurrentHashMap
- 2. Практические примеры использования NLTK
- 3. Практические примеры использования пружинной интеграции?
- 4. Практические примеры хорошего использования классов?
- 5. Практические примеры использования UDF (ITVF и MTVF)
- 6. Практические примеры использования промежуточного программного обеспечения OWIN
- 7. Практические примеры документов MongoDB
- 8. Практические примеры взаимной рекурсии?
- 9. Практические примеры Idris
- 10. Практические примеры оператора Python AND
- 11. Практические примеры авторизации службы RESTful?
- 12. Почему нам нужны глобальные временные таблицы, их практические примеры использования
- 13. Практические примеры использования для нового some- Clojure в> Макрос
- 14. Ловушки и практические примеры использования: Toplink, Hibernate, Eclipse Link, Ibatis
- 15. Обратные вызовы Spring Context и Bean Lifecycle: практические примеры использования
- 16. Практические примеры использования идентификатора корреляции в обмене сообщениями?
- 17. Как узнать живое время для явного курсора?
- 18. Что такое практические примеры объектов прототипа javascript?
- 19. Практические примеры поздней статической привязки в PHP?
- 20. Возврат SQL-запроса явного курсора
- 21. Практические способы использования GPL?
- 22. Практические причины использования procs?
- 23. цикл внутри курсора оракула
- 24. Примеры использования бинарного поиска
- 25. OTP-поведение: gen_fsm; gen_event. Практические примеры?
- 26. Практические примеры Тестирование кода на C#
- 27. Практические примеры Java - возврат объекта к общему
- 28. Вызвать метод в android - практические примеры
- 29. Каковы практические примеры функций более высокого порядка foldl и foldr?
- 30. Как создать подмножество курсора оракула
['where current of'] (http://docs.oracle.com/cd/E11882_01/appdev.112/e25519/static.htm#CIHHIIID) -clause требует явного указателя. – user272735