Шрифт:
Интервал:
Закладка:
Рис. 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.
. ! .
Воздействие диалектовЭффекты команд могут иметь некоторые изменения в зависимости от диалекта.
* Клиент диалекта 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 ;
BLOBVXEW отображает данные BLOB В текстовом редакторе по умолчанию.
BLOBVIEW идентификатор-BLOB ;
где идентификатор-BLOB- идентификатор, содержащий два шестнадцатеричных числа, разделенных двоеточием (:). См. описание BLOBDUMP для определения идентификатора BLOB, который вы ищите. В текущей версии BLOBVIEW не поддерживает редактирования BLOB В режиме онлайн. Это может быть добавлено в будущие реализации.
Пример:
SQL> BLOBVIEW 85:7 ;
Замечание по ошибке: BLOBVIEW может вернуть ошибку "Invalid transaction handle" (Неверный дескриптор транзакции) после закрытия редактора. Для исправления ситуации запустите транзакцию вручную с помощью:
SQL> SET TRANSACTION;
EDIT позволяет отредактировать и заново выполнить предыдущую команду isql или пакет команд в исходном файле.
SQL> EDIT [имя-файла] ;
где имя-файла- (необязательно) полностью заданное имя файла для редактирования в файловой системе.
Пример:
SQL> EDIT /usr/mystuff/batch.sql
Команда EDIT также может быть использована для открытия предыдущих операторов в редакторе:
SQL> SELECT EMP_CODE, EMP_NAME FROM EMPLOYEE ; SQL> EDIT ;
Нажмите клавишу <Enter> для отображения "прокрутки" вашей сессии isql в текстовом редакторе ASCII по умолчанию в вашей системе. Отредактируйте, при желании сохраните и выйдите. Отредактированный пакет команд будет заново выполнен в вашей командной строке isql после того, как вы выйдете из редактора.
EXIT подтверждает текущую транзакцию без подсказки, закрывает базу данных и завершает сессию isql. Если вам нужно выполнить откат, а не подтверждение транзакции, используйте QUIT.
SQL> EXIT ;
EXIT не принимает никаких аргументов.
HELP отображает список команд isql с их описанием. Вы можете объединить эту команду с OUTPUT для вывода списка в файл.
SQL> HELP ;
Пример:
SQL> OUTPUT HELPLIST.TXT ; SQL> HELP ;
SQL> OUTPUT ; /* переключает вывод опять на монитор */
HELP не принимает никаких аргументов.
INPUT читает и выполняет блок команд из указанного текстового файла (скрипта SQL). Входные файлы могут содержать другие команды INPUT, предоставляя таким образом возможность проектирования цепочного или структурированного набора скриптов DDL. Для создания скриптов используйте текстовый редактор или создавайте их интерактивно посредством команд OUTPUT или EDIT.
SQL> INPUT имя-файла ;
где имя-файла - полностью заданное имя файла, содержащего операторы и команды SQL.
Пример:
SQL> INPUT /data/schemascripts/myscript.sql ;
В скрипте:
CREATE EXCEPTION Е010 'This is an exception.'; COMMIT;
-- TABLE DEFINITIONS
INPUT '/data/schemascripts/tabledefs.sql'; - CONSTRAINT DEFINITIONS
INPUT 'data/schemascripts/constraintdefs.sql';
OUTPUT перенаправляет выходные данные в файл на диске или (назад) на стандартное устройство вывода (монитор). Используйте команды SET ECHO для включения или исключения из вывода команд:
* SET ECHO ON - для вывода команд и данных;
* SET ECHO OFF - для вывода только данных.
SQL> OUTPUT [имя-файла];
где имя-файла - полностью заданное имя файла, содержащего операторы и команды SQL. Если имя файла не указано, результаты появятся на стандартном выводе, на мониторе (т. е. вывод в файл отключен).
Пример:
SQL> OUTPUT d:dataemployees.dta ;
SQL> SELECT EMP_NO, EMP_NftME FROM EMPLOYEE ;
/* вывод отправляется в файл */
SQL> OUTPUT ; /* переключает вывод опять на монитор */
- C++ - Страустрап Бьярн - Программирование
- Энциклопедия разработчика модулей ядра Linux - Ори Померанц - Программирование
- Программирование. Принципы и практика использования C++ Исправленное издание - Бьёрн Страуструп - Программирование