test-01
Дата: 24.11.2009 15:09:45
Как я понял, в момент открытия курсора необходимая выборка данных сохраняется и с ней можно работать, даже если производилось удаление или добавление или изменение данных попавших в данную выборку. Так же использование курсора позволяет обращаться неограниченное число раз к выборке данных и эти данные фактически будут запрошены один раз, т е уменьшится нагрузка на БД.
Правильно ли я понял возможности курсоров и есть ли еще какие то?
tru55
Дата: 24.11.2009 15:19:06
PL/SQL User’s Guide and Reference
Cursors
Oracle uses work areas to execute SQL statements and store processing information.
A PL/SQL construct called a cursor lets you name a work area and access its stored
information. There are two kinds of cursors: implicit and explicit. PL/SQL implicitly
declares a cursor for all SQL data manipulation statements, including queries that
return only one row. For queries that return more than one row, you can explicitly
declare a cursor to process the rows individually.
andrey_anonymous
Дата: 24.11.2009 15:41:53
test-01, Вы неправильно поняли.
Например, в PL/SQL cursor как синтаксическая конструкция позволяет явно манипулировать курсором реальным - открыть (распарсить+выполнить), выбирать из открытого курсора строки (fetch, fetch bulk collect limit...), закрыть курсор. А также определить bind-переменные в "структурном" стиле как параметры курсора.
Обратиться к строке курсора можно только до следующего fetch. В OCI есть "двунаправленный" (scrollable) курсор, но это совсем отдельная экзотика.
Данные курсора согласованы на момент execute в режиме изоляции read commited и на момент начала транзакции - в прочих режимах.
Это не значит, что курсор работает с персональной копией данных.
Это значит, что каждый блок данных читается в режиме согласованного чтения - т.е. восстанавливается та его версия, которая имела место быть на момент согласования. Чем больше изменений проходит по источнику данных курсора между точкой согласования курсора и выборкой очередной строки, тем дороже обходится выборка.