Подсказка дня

Термин курсор (cursor) является одним из неопределенных и многозначных терминов в мире Oracle.

В программах конечных пользователей термин «курсор» часто используется для обозначения результирующего набора данных – фактически это немного больше, чем индекс в массиве, на который ссылается «выполняемая» версия инструкции, хранящаяся в библиотечном кэше, и связывает некоторые локальные (в программе конечного пользователя) данные с удаленной (в библиотечном кэше) информацией.

Внутри экземпляра Oracle данный термин имеет две (или даже три) наиболее общих интерпретации. Первое толкование подразумевает (переходные) данные – информация о состоянии, подмножество результатов и так далее – хранящиеся в памяти сеанса, выполняющего инструкцию. Второе толкование подразумевает выполняемую версию инструкции SQL, хранящуюся в библиотечном кэше.

Третье толкование появилось потому, что для единственной инструкции может быть создано несколько планов выполнения (вместе с деталями рабочего окружения), сгруппированных по общим чертам в библиотечном кэше – как следствие мы часто слышим такие фразы, как родительский курсор (parent cursor, общие черты) и дочерние курсоры (child cursors, конкретные планы выполнения).

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

Яндекс.Метрика