Используются ли курсоры для операторов INSERT, UPDATE и DELETE?

Я знаю, что курсоры (неявные или явные) могут быть созданы для операторов SELECT.

Но курсоры (скажем, неявные) также создаются для операций INSERT, UPDATE и DELETE. Если они делают то, что там цель.

Чтобы внести ясность в вопрос: оператор SELECT может привести к миллиону записей, и создание нечувствительного (фактические данные копируются) курсора может быть полезно для возврата результатов клиенту, когда клиент прокручивает вперед или назад и можно избежать отправки всех данных в одном сетевом запросе. И любые другие преимущества, о которых стоит упомянуть, приветствуются.
Но с операциями записи (INSERT, UPDATE и DELETE) требуется курсор, не будет ли это накладным расходом ресурсов, даже если рассматривается параллелизм .? Если операция должна потерпеть неудачу, она просто потерпит неудачу раньше. Или дело в том, что для изоляции транзакций они необходимы. Таким образом, атомарность и согласованность гарантируются созданием курсора. (параллелизм может быть обработан с помощью комбинации других механизмов, таких как 2PL или MVCC и т. д., но на данный момент я больше сосредоточен на роли курсоров в транзакции)

Таким образом, кажется, что транзакции также необходимо учитывать, приводит ли каждая транзакция к созданию курсора (неявно). Или, учитывая, что существуют другие механизмы для обработки транзакций (с параллелизмом и без), курсор вообще не имеет права голоса или просто играет ограниченную роль при работе с транзакцией.


person samshers    schedule 05.09.2016    source источник
comment
Вы говорите о курсорах в PL/SQL или о курсорах, созданных Oracle на бэкэнде и, по сути, это то же самое, что и анализируемый оператор?   -  person a_horse_with_no_name    schedule 05.09.2016
comment
@a_horse_with_no_name, по сути, я пытаюсь понять, что такое курсоры и как они помогают. Не буду делать много PL/SQL, но знание не повредит, если только они полностью не отличаются от того, как их использует SQL.   -  person samshers    schedule 05.09.2016


Ответы (1)


Почти каждый оператор должен создавать/открывать курсор (даже операторы DDL). Курсор – это указатель на частную область SQL, в которой хранится информация об обработке инструкции SELECT или языка обработки данных (DML) (INSERT, UPDATE, DELETE или MERGE).

Если вы не создаете явный курсор, используется неявный курсор. Наиболее полезным и наиболее часто используемым атрибутом неявного курсора является атрибут %ROWCOUNT, он возвращает количество затронутых строк.

Взгляните на эти документы, чтобы получить больше информации.

Работа с курсорами

Атрибут курсора SQL (неявный)

person Wernfried Domscheit    schedule 05.09.2016
comment
спасибо за ссылку на Oracle. Будучи пользователем Oracle, эти ссылки очень важны для меня. - person samshers; 05.09.2016