Как установить ширину столбца в запросе Informix isql из командной строки - PullRequest
1 голос
/ 23 декабря 2010

При использовании пользовательского интерфейса Informix isql, если результат оператора select превышает ширину вашего экрана, выходные данные отображаются на экране вертикально.

1st col_1
1st col_2
1st col_3

2nd col_1
2nd col_2
2nd col_3

etc

Однако, если ширина дисплея достаточно велика, результаты будут отображаться горизонтально.

1st col_1                  1st col_2                1st col_3
2nd col_2                  2nd col_2                2nd col_3
etc.

Если тот же запрос выдается из командной строки: echo "select col_1, col_2, col_3" | isql -s dbname, похоже, нет способа заставить его признать, что дисплей достаточно широкий, чтобы уместить все данные по горизонтали. Я считаю, что по умолчанию используется 80 столбцов.

Если кто-то обладает этими знаниями, я хотел бы знать, как заставить isql из командной строки распознавать всю ширину экрана, либо автоматически, путем передачи аргумента, либо, возможно, в некоторой конфигурации Informix. Использование переменной среды COLUMNS не помогает, как и stty столбцы.

Спасибо, Рич

Ответы [ 2 ]

1 голос
/ 23 декабря 2010

Я предполагаю, что вы используете ISQL 7.50 или более раннюю версию на любой платформе: когда вы говорите ISQL UI, я также предполагаю редактор, управляемый меню? .. как в 'isql dbname -qr sqlproc.sql'.

поэтому в вашем sqlproc.sql, возможно, вы можете попробовать поиграть с оператором OUTPUT или передать вышеприведенный пример в программу, которая может предоставить вам желаемое форматирование:

OUTPUT TO [PIPE program] /usr/frank/query1 [WITHOUT HEADINGS]
SELECT col_1, col_2, col_3 FROM tabname;

Так как выЕсли вы используете ISQL, другой альтернативой, и, вероятно, лучшим вариантом, будет использование средства записи отчетов ACE для настройки выходного формата по вашему желанию!

FORMAT

ON EVERY ROW

PRINT COLUMN  1, col_1,
      COLUMN 20, col_2,
      COLUMN 40, col_3
1 голос
/ 23 декабря 2010

Нет способа сделать это надежно. На самом деле, действительно нет способа сделать это ненадежно, либо. Я вижу, что вы пытались установить переменные окружения COLUMNS и (возможно) LINES, но isql, кажется, игнорирует их. Вы можете попробовать взломать вашу запись в termcap или terminfo, чтобы в ней было написано столько столбцов, сколько у вас есть, но это далеко от идеала (и все же может не работать).

Если вы хотите получить равномерный, предсказуемый вывод, используйте SQLCMD из Программного архива IIUG (который не является программой Microsoft с новым именем!).

Для справки: с какой версией ISQL вы пользуетесь, на какой платформе и с какой версией СУБД Informix вы работаете? Всегда полезно включить эту информацию в вопрос. Например, « ISQL 7.50.FC3 с IDS 11.50.FC6 в Solaris 10 ».

...