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 несколькими способами.
* При запуске isqclass="underline"
[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.
. ! .
Эффекты команд могут иметь некоторые изменения в зависимости от диалекта.
* Клиент диалекта 1 обрабатывает все команды в соответствии с ожиданием языка InterBase 5 и синтаксиса с некоторыми изменениями. Например, если вы создаете таблицу, в которой задается столбец типа DATE, вы увидите информационное сообщение, говорящее, что "DATE datatype is now called TIMESTAMP" (Тип данных DATE сейчас называется TIMESTAMP).
* В клиенте диалекта 2 элементы, имеющие различную интерпретацию в диалектах 1 и 3, отмечаются предупреждениями или ошибками для помощи в миграции баз данных в диалект 3.
* Клиент диалекта 3 анализирует все операторы в соответствии с родной семантикой SQL Firebird: кавычки используются для идентификаторов с ограничителями и не распознаются как ограничители строк, тип данных DATE содержит только дату, а истинные числа (числа с фиксированной точкой) с точностью больше 9 хранятся как BIGINT (NUMERIC(18, О) в Firebird 1.0.x).
Интерактивные команды
Вы можете интерактивно вводить три вида команд или операторов в подсказке SQL>.
* Операторы SQL определения данных (DDL), такие как CREATE, ALTER, DROP и REVOKE. Эти операторы создают, изменяют или удаляют метаданные и объекты или управляют полномочиями доступа пользователя (привилегиями) к базе данных.
* Операторы SQL манипулирования данными (DML), такие как SELECT, INSERT, UPDATE и DELETE. Выход операторов SELECT может быть отображен или направлен в файл (см. команду OUTPUT).
* Команды isql, которые разделяются на три основные категории:
• общие команды (например, команды чтения входного файла, записи в выходной файл или завершения сессии isql);
• команды SHOW (для отображения метаданных и другой информации базы данных);
• команды SET (для изменения окружения isql).
Создание и изменение объектов базы данных
В сессии isql вы можете выдавать операторы DDL один за другим для создания (CREATE) или удаления (DROP) баз данных, доменов, генераторов, таблиц, индексов, триггеров и хранимых процедур. Вместе с исключениями генераторов вы также можете выдавать операторы ALTER для любого из этих объектов.
Поскольку можно создавать базу данных, выдавая и подтверждая серии операторов DDL в процессе сессии интерактивной isql, такой подход является специализированным. Он не позволяет документировать процесс и оставляет дыры в процессе отладки и тестирования.
Очень хорошей практикой является использование скриптов для создания базы данных и ее объектов. Скрипт для создания и изменения объектов базы данных иногда называют скриптом схемы, файлом определения данных или просто DDL-скриптом. Тема использования скриптов схемы рассматривается в деталях в главе 14.
Скрипты по изменению базы данных дают вам постоянную фиксацию эволюции вашей базы данных и возможность отслеживать и отменять любые неразумные изменения. Утилита isql может создавать скрипт в процессе интерактивной сессии, передавая ваш ввод с клавиатуры в указанный файл. Чтобы узнать, как это сделать, прочтите примечания к команде OUTPUT в следующем разделе.
Вы можете запустить скрипт, созданный в isql или в любом другом текстовом редакторе, посредством команды INPUT. Она может быть также использована внутри скрипта для создания вложенных скриптов.
Общие команды isql
Общие команды isql выполняют множество полезных задач, включая чтение, запись и выполнение скриптов схемы, а также выполнение команд командной строки. Командами являются BLOBDUMP, BLOBVIEW, EDIT, EXIT, HELP, INPUT, OUTPUT, QUIT и SHELL.
BLOBDUMP сохраняет данные BLOB В указанном файле:
BLOBDUMP идентификатор-BLOB имя-файла;
где идентификатор-BLOB- идентификатор, содержащий два шестнадцатеричных числа, разделенных двоеточием (:). Первое число является идентификатором таблицы, содержащей столбец BLOB. Второе - последовательный номер объекта. Для получения этого идентификатора выдайте любой оператор SELECT, который выбирает столбец BLOB. Выход покажет шестнадцатеричный идентификатор BLOB выше или на месте столбца BLOB в зависимости от того, установлен ли SET [DISPLAY] В ON или OFF.
имя-файла - полное имя файловой системы того файла, который получает данные.
Пример:
SQL> BLOBDOMP 32:d48 IMAGE.JPG ;