Firebird РУКОВОДСТВО РАЗРАБОТЧИКА БАЗ ДАННЫХ
Шрифт:
Символ терминатора
Терминатором оператора по умолчанию является точка с запятой (;), которая используется во всех примерах в этой главе. Вы можете изменить этот терминатор любым другим символом или группой символов посредством команды SET TERM[INATOR]. Например, чтобы заменить его на "!!", используйте следующий оператор:
SQL> SET TERM !!;
SQL>
Продолжение строки подсказки
Если вы нажмете клавишу <Enter>, забыв завершить оператор терминатором, вы увидите продолжение подсказки CON>
SQL> SHOW DATABASE
CON>
Если это было ошибкой, просто наберите терминатор и опять нажмите клавишу <Enter>. Причем вы можете использовать эту возможность, чтобы сделать ваш текст более читаемым, например:
SQL> CREATE TABLE ATABLE (
CON> ID INTEGER NOT NOLL,
CON> DATA VARCHAR(20),
CON> DATE_ENTERED DATE
CON> DEFAULT CURRENT_DATE
CON> );
SQL>
! ! !
СОВЕТ. Одна из причин применения возможности продолжения - это то, что вы можете использовать команду OUTPUT для помещения введенного вами в isql текста в файл. Поскольку вывод сохраняется точно в таком же виде, как вы вводите данные, все ваши пробельные отступы будут сохранены. Многие пользователи Firebird используют isql в качестве единственного редактора скриптов!
. ! .
Транзакции в isql
Управление транзакциями в isql отличается в зависимости от того, вводите ли вы оператор DDL, команду SHOW или другие виды операторов.
Когда isql стартует, она запускает транзакцию с уровнем изоляции SNAPSHOT (параллельный) с установкой разрешения блокировок WAIT. Если вы выполняете не операторы DDL и не команды SHOW, транзакция продолжает оставаться текущей, пока вы не выдадите оператор COMMIT или ROLLBACK.
Вы можете стартовать явную транзакцию, подтвердив текущую транзакцию, и выдав оператор SET TRANSACTION. Например, для старта транзакции READ COMMITTED NO WAIT введите:
SQL> COMMIT;
SQL> SET TRANSACTION
CON> NO WAIT READ COMMITTED;
При завершении вашей задачи просто выдайте как обычно оператор COMMIT. Следующий оператор вернет систему в конфигурацию по умолчанию.
Каждый раз, когда вы выдаете оператор DDL, isql стартует для него специальную транзакцию и немедленно ее подтверждает после того, как вы нажимаете клавишу <Enter>. Сразу после этого стартует новая транзакция. Вы можете изменить автоматическое поведение, выдав команду SET AUTODDL OFF из подсказки SQL до начала выполнения ваших операторов DDL:
SQL> SET AUTODDL OFF;
Чтобы опять включить режим автоматического подтверждения операторов DDL, введите:
SQL> SET AUTODDL ON;
Для переключения между режимами включено/выключено существует сокращенная версия команды:
SQL> SET AUTO;
Команды SHOW в isql запрашивают данные из системных таблиц. Когда вы вызываете команду SHOW, isql подтверждает существующую транзакцию и стартует новую с уровнем изоляции READ COMMITTED. Это гарантирует, что вы всегда видите самые последние изменения метаданных, как только они будут изменены.
Поиск
Начиная с версии 1.5 и выше, isql позволяет вам отыскивать строки в буфере способом, похожим на возможность readiine на платформах POSIX. Используйте клавиши <Т> (стрелка вверх) и <i> (стрелка вниз) для "прокручивания" буфера isql по одной строке за раз для поиска копий строк, которые вы вводили ранее.
Использование предупреждений
По умолчанию isql выдает предупреждения при некоторых условиях, например:
* операторы, не выполняющие действий;
* двусмысленная спецификация соединений в Firebird 1.0.x (в версии 1.5 и выше это вызовет исключение);
* выражения, которые дадут различные результаты в различных версиях Firebird;
* вызовы API, которые будут изменены в будущих версиях;
* когда база данных переведена в состояние SHUTDOWN.
Для переключения режима выдачи предупреждений в процессе выполнения сессии интерактивной isql используйте SET WARNINGS или сокращенный вариант SET WNG.
Обработка исключений
Ошибки в isql обрабатываются тем же образом, что и приложении DSQL. isql отображает сообщение об ошибке, содержащее переменную SQLCODE и текст сообщения из массива состояния Firebird, как показано на рис. 37.4.
Рис. 37.4. Пример сообщения об ошибке в isql
Ошибки SQL со значением SQLCODE меньше нуля означают, что оператор не был выполнен. Все они представлены в приложении 10. Вы можете также увидеть одно из предупреждений SQL или информационное сообщение, а именно:
* 0: SUCCESS (успешное выполнение);
* +1-99-. SQLWARNING (системное предупреждение или информационное сообщение);
* +100 NOT FOUND (указывает, что указанные строки не найдены или достигнут "конец файла"; т. е. определен конец текущего активного набора строк).
Установка в isql диалекта
Если вы запустили isql и соединились с базой данных без указания диалекта, утилита принимает диалект базы данных.
Вы можете установить диалект для isql несколькими способами.
* При запуске isql:
[bin] isql -s n
где n- число 1, 2 или 3. Если вы зададите диалект этим способом, isql сохранит данный диалект после соединения, если только вы явно его не измените.
* В сессии isql или в скрипте SQL:
SET SQL DIALECT N;
Утилита продолжит работать с этим диалектом, пока он не будет явно изменен. Диалект не может быть установлен как параметр оператора CREATE DATABASE.
! ! !
ВНИМАНИЕ! Когда вы создаете базу данных интерактивно с использованием isql, база данных будет в том диалекте, который в настоящий момент существует у isql во время выдачи оператора CREATE DATABASE. Вам нужно будет учесть это, если у вас была перед этим открыта база данных с диалектом 1, потому что isql останется в диалекте 1 и после отключения от базы данных с диалектом 1.