Курсоры
Контакт клиента с сервером SQLBase является постоянным. Сеанс контакта с базой данных
инициируется клиентом с помощью команды CONNECT и прекращается командой
DISCONNECT. Во время сеанса клиент выпускает одну или несколько транзакций к базе данных.
SQLBase относится СУБД транзакционного типа, основанного на концепции курсоров (cursor) в
отличие от технологии процессов базы данных (db-process).
Курсор в SQLBase имеет много самых разных значений. Прежде всего, курсор - это идентификатор
контакта пользователя с базой данных (или административного контакта с сервером SQLBase).
Далее, с курсором связаны скомпилированные запросы на языке SQL, извлеченные из базы данных
и подготовленные к выполнению хранимые команды и процедуры, а также полученные в
результате выполнения запросов, команд и процедур множества результатов (result sets). Наконец,
курсор также определяет положение (строку) в текущем result set'е, обрабатываемым клиентским
приложением.
В SQLBase, так же как и в Oracle, не существует специальной команды, определяющей начало
транзакции подобно BEGIN WORK или BEGIN TRANSACTION. Транзакция автоматически
начинается с первого запроса к базе данных, последовавшего за окончанием предыдущей
транзакции. Для указания окончания транзакции служат команды, приведенные на рис. 4.
Рис. 4. Команды окончания транзакции SQLBase
ROLLBACK | Неудачное окончание транзакции. Изменения не записываются в базу данных. Блокировки, связанные с данной транзакцией сбрасываются. |
COMMIT | Удачное окончание транзакции. Изменения записываются в базу данных. Блокировки, связанные с данной транзакцией сбрасываются. |
SAVEPOINT | Удачное окончание части длительной транзакции. Частичные изменения записываются в базу данных. Эта команда используется во время длительных транзакций (например, ввода большого количества данных) для фиксации прохождения некоторого этапа. Если при дальнейшей обработке транзакции произойдет ее откат (ROLLBACK), все изменения, сделанные до последней команды SAVEPOINT, останутся в базе данных. |
SQLBase поддерживает именованные и распределенные транзакции. Именованные транзакции
позволяют объединять несколько курсоров от одного клиента в процесс, изолированный от других
процессов в той же базе данных. Это позволяет организовать работу клиента с базой
одновременно в нескольких режимах. Например, клиент может выделить в своем приложении 2
именованные транзакции "Проводка" и "Баланс". При этом ошибка выполнения запроса по
одному из курсоров транзакции "Проводка" приведет к откату только этой транзакции и не
окажет никакого действия на курсоры транзакции "Баланс".
Описание распределенных курсоров приведено ниже в разделе "Распределенные базы
данных".
Существует также разделение курсоров по объекту контакта.
Курсоры базы данных используются для выполнения запросов к базе данных (предложений
SELECT, INSERT, UPDATE, DELETE), а также выполнения команд конфигурирования базы
данных (CREATE, ALTER, DROP, GRANT, REVOKE и т.д.).
Курсоры сервера применяются для операций, непосредственно связанных с функционированием
сервера SQLBase. К ним относятся процедуры архивирования и восстановления (BACKUP и
RESTORE), команды создания, активизации и удаления баз данных (CREATE DATABASE, DROP
DATABASE, INSTALL DATABASE, DEINSTALL DATABASE), а также команды, изменяющие
параметры и режимы работы SQLBase в целом.
Для создания курсора каждого типа (подключения к серверу и базе данных соответственно)
требуется указать имя пользователя и пароль, который может быть разным для базы данных и
сервера SQLBase.