Найти в Дзене
Психуюлия

Запросы к БД через утилиту isql.exe

Оглавление

Что за утилита isql и где ее найти

В составе пакета Firebird после установки в папке /Bin есть полезная программа isql.exe.

Запускаем это консольное приложение, получаем стандартное окно с чёрным фоном.

 Как выглядит окно утилиты isql.exe
Как выглядит окно утилиты isql.exe

Итак, утилита запущена, приглашение поработать ручками с SQL получено в виде мигающего курсора.

Подключаем БД Firebird с помощью утилиты isql.exe

Как нам подсказывает строка приглашения при запуске, так мы и сделаем.

Поскольку БД у нас уже имеется, и известен путь до неё, просто вбиваем ручками строку без ошибок, поскольку вклиниться и отредактировать многострочный текст не получится. Если у вас получилось, расскажите в комментариях, как.

Если строка получается длинной, то можно просто перейти на следующую строку и продолжить через приглашение >CON, как показано ниже.

Подключение к БД через CONNECT
Подключение к БД через CONNECT

Набиваем ручками

CONNECT <наш путь к БД>

user 'SYSDBA' password 'masterkey';

В конце строки символ точки с запятой обязателен для синтаксиса SQL.

Проверяем команду на наличие ошибок, при их отсутствии нажимаем клавишу Еnter.

При правильном подключении мы получим строку

DATABASE <полный путь к БД>, user: SYSDBA'

и можем приступить непосредственно к задаче, то есть проверке запроса.

Как выполнить многострочный запрос из файла в isql.exe

Принимаем, как аксиому, что запрос реальный, рабочий, относится к имеющейся БД. Однако, это желательно проверить заранее.

Открываем файл, просто копируем целиком весь текст(а это, прочим между, строчек сорок абсолютно незнакомого содержания с названиями таблиц, полей, переименованием, с вложенных в запрос другим запросом).

Обычной процедурой вставки текста клавишами Shift+Insert через буфер обмена вставляем скопированный текст запроса сразу за мигающим курсором с приглашением >SQL.

Получаем многострочную портянку-копию нашего запроса.

Добавляем точку с запятой, запускаем нажатием на Enter и....

Получаем ошибку, что не определены некоторые параметры, а конкретно :date1 и :date2.

Так выяснилось, что запрос параметрический, и эти параметры надо каким-то образом задать.

Поскольку название говорит само за себя, надо задать адекватный интервал в виде двух реальных дат, чтобы наш запрос имел смысл типа "покажи мне расход конкретных материалов в такой то организации за период, задаваемый датами".

Здесь на помощь приходит IBExpert, с помощью которого можно найти и просмотреть нужную таблицу, определить реальные даты. Можно вообще задать одинаковую дату. Я выбрала соседние, и подставила конкретные значения в кавычках вместо :date - в формате '08.03.1917'.

Запускаем запрос на выполнение, как описано выше.

Люблю смотреть, как другие работают. На экране замелькали буквы-цифры, и я подумала, что выполняется безумный бесконечный цикл, но потом, просто тыкнув мышкой в поле окна, с удивлением обнаружила, что таким способом можно приостановить выполнение, и прочитать текущее содержимое экрана.

Так я убедилась, что конструкция рабочая и выдает более-менее адекватную информацию.

Поскольку вывод на экран это очень медленная процедура, то вывод почти двух тысяч получившихся записей занял минут пятнадцать даже на шустром ноутбуке с 8гб оперативки.

В это время можно по медитировать, выпить кофе и просто сделать перерыв и подумать, что же делать дальше.

А дальше предстоит запихать результат запроса в таблицу Ехсel, чтобы было все быстро и красиво.

Но об этом чуть позже.

Благодарю за внимание!