Курсоры в прикладных программах часто используются для последовательного просмотра данных.
Если курсор не связан с операцией группировки, то фактически каждая строка курсора
соответствует строго только одной строке исходной таблицы, и в этом случае курсор
удобно использовать для оперативной корректировки данных. В стандарте определены
операции модификации данных, связанные с курсором. Операция удаления строки,
связанной с текущим указателем курсора, имеет следующий синтаксис:
DELETE FROM
<имя_таблицы> WHERE CURRENT OF <имя курсора>
Если указанный
в операторе курсор открыт и установлен на некоторую строку, и курсор определяет
изменяемую таблицу, то текущая строка курсора удаляется, а он позиционируется
перед следующей строкой. Таблица, указанная в разделе FROM оператора DELETE,
должна быть таблицей, указанной в самом внешнем разделе FROM спецификации курсора.
Если нам
необходимо прочитать следующую строку курсора, то надо снова выполнить оператор
FETCH NEXT.
Аналогично
курсор может быть использован для модификации данных. Синтаксис операции позиционной
модификации следующий:
UPDATE <имя__таблицы> SET <имя_столбца1>= {<значение> | NULL} [{.<имя_столбца N>= {<значение> | NULL}}...]
WHERE CURRENT
OF <имя_курсора>
Одним оператором
позиционного обновления могут быть заменены несколько значений столбцов строки
таблицы, соответствующей текущей позиции курсора. После выполнения операции
модификации позиция курсора не изменяется.
Для того
чтобы можно было применять позиционные операторы удаления (DELETE) и модификации
(UPDATE), курсор должен удовлетворять определенным требованиям. Согласно стандарту
SQL1, это следующие требования:
Использование
курсора для операций обновления значительно усложняет работу с подобным курсором
со стороны СУБД, поэтому операции, связанные с позиционной модификацией, выполняются
гораздо медленнее, чем операции с курсорами, которые используются только для
чтения. Именно поэтому рекомендуется обязательно указывать в операторе определения
курсора предложение READ ONLY, если вы не собираетесь использовать данный курсор
для операций модификации. По умолчанию, если нет дополнительных указаний, СУБД
создает курсор с возможностью модификации.
Курсоры —
удобное средство для формирования бизнес-логики приложений, но следует помнить,
что если вы открываете курсор с возможностью модификации, то СУБД блокирует
все строки базовой таблицы, вошедшие в ваш курсор, и тем самым блокируется работа
других пользователей с данной таблицей.
Чтобы свести
к минимуму количество требуемых блокировок, при работе интерактивных программ
следует придерживаться следующих правил:
Однако когда
мы рассматривали модели «клиент—сервер», применяемые в БД, то определили,
что в развитых моделях серверов баз данных большая часть бизнес-логики клиентского
приложения выполняется именно на сервере, а не на клиенте. Для этого используются
специальные объекты, которые называются хранимыми процедурами и хранятся в БД,
как таблицы и другие базовые объекты.
В связи с
этим фактом курсоры, которые могут быть использованы в приложениях, обычно делятся
на курсоры сервера и курсоры клиента. Курсор сервера создается и выполняется
на сервере, данные, связанные с ним, не пересылаются на компьютер клиента. Курсоры
сервера определяются обычно в хранимых процедурах или триггерах.
Курсоры клиента
— это те курсоры, которые определяются в прикладных программах, выполняемых
на клиенте. Набор строк, связанный с данным курсором, пересылается на клиент
и там обрабатывается. Если с курсором связан большой набор данных, то операция
пересылки набора строк, связанных с курсором, может занять значительное время
и значительные ресурсы сети и клиентского компьютера.
Конечно,
курсоры сервера более экономичны и выполняются быстрее. Поэтому последней рекомендацией,
связанной с использованием курсоров, будет рекомендация трансформировать логику
работы вашего приложения, чтобы как можно чаще вместо курсоров клиента использовать
курсоры сервера.
Релятивисты и позитивисты утверждают, что "мысленный эксперимент" весьма полезный интрумент для проверки теорий (также возникающих в нашем уме) на непротиворечивость. В этом они обманывают людей, так как любая проверка может осуществляться только независимым от объекта проверки источником. Сам заявитель гипотезы не может быть проверкой своего же заявления, так как причина самого этого заявления есть отсутствие видимых для заявителя противоречий в заявлении.
Это мы видим на примере СТО и ОТО, превратившихся в своеобразный вид религии, управляющей наукой и общественным мнением. Никакое количество фактов, противоречащих им, не может преодолеть формулу Эйнштейна: "Если факт не соответствует теории - измените факт" (В другом варианте " - Факт не соответствует теории? - Тем хуже для факта").
Максимально, на что может претендовать "мысленный эксперимент" - это только на внутреннюю непротиворечивость гипотезы в рамках собственной, часто отнюдь не истинной логики заявителя. Соответсвие практике это не проверяет. Настоящая проверка может состояться только в действительном физическом эксперименте.
Эксперимент на то и эксперимент, что он есть не изощрение мысли, а проверка мысли. Непротиворечивая внутри себя мысль не может сама себя проверить. Это доказано Куртом Гёделем.
Понятие "мысленный эксперимент" придумано специально спекулянтами - релятивистами для шулерской подмены реальной проверки мысли на практике (эксперимента) своим "честным словом". Подробнее читайте в FAQ по эфирной физике.