Firebird iSQL - Как ввести SQL-запрос из командной строки и получить вывод в более простом формате

Я использую инструмент Firebird isql.exe для запроса существующей базы данных:

isql -u <username> -p <password> <database> -i <file.sql> -o <output.txt>

который читает мои операторы SQL из file.sql и сохраняет результаты в output.txt.

Но есть ли способ передать операторы SQL в isql через командную строку, а не из файла?

Это потому, что я фактически планирую выполнить приведенную выше команду в моем сценарии установки .exe (через ExecWait установщика NSIS).

Кроме того, есть ли способ отформатировать вывод таким образом, чтобы возвращалась только необходимая информация? В настоящее время первая строка вывода содержит имена столбцов, вторая строка - набор "====" в качестве разделителя, третья строка - фактическая информация с произвольным количеством пробелов между каждым столбцом. Этот выходной формат затрудняет использование в моем сценарии.


person Obay    schedule 04.12.2014    source источник
comment
Относительно вашего второго вопроса: SET ЗАГОЛОВОК   -  person Mark Rotteveel    schedule 04.12.2014


Ответы (2)


Для вашей первой проблемы вы можете использовать Firebird isql без входного файла как:

echo select * from rdb$database; | isql -u sysdba -p password C:\path\to\db.fdb

Это перенаправляет стандартный вывод из echo (значение select * from rdb$database;) на стандартный ввод isql. Результат запроса (или запросов) будет напечатан на стандартный вывод isql (или в файл, если вы используете -o).

Однако, поскольку эхо — это функция командной строки, я не уверен, будет ли это работать из NSIS. В противном случае вам понадобится что-то, что делает то же самое, что и эхо: выводит значения его параметров на стандартный вывод.

Как я уже отмечал ранее, для вашего второго вопроса вы должны посмотреть SET HEADING и, возможно, SET WIDTH.

person Mark Rotteveel    schedule 04.12.2014
comment
Идеальный! Я заставил его работать без части $database. Большое тебе спасибо - person Obay; 05.12.2014
comment
Я использую SET LIST ON, но кажется, что SET HEADING OFF на это не влияет. Есть ли способ скрыть имена столбцов при установке LIST на ON? - person Obay; 05.12.2014
comment
@Obay Насколько я знаю, нет. - person Mark Rotteveel; 05.12.2014
comment
@Obay В моем ответе нет части $database: rdb$datbase - это (системная) таблица, которую я использовал для примера. - person Mark Rotteveel; 05.12.2014

На случай, если другие найдут это полезным, я действительно смог реализовать это в NSIS, используя $PLUGINSDIR, временную папку, созданную NSIS во время выполнения. Я создал временный входной и выходной файл в этой папке. Я записал операторы SQL во входной файл, используя FileWrite, и прочитал вывод, используя FileRead.

person Obay    schedule 05.12.2014