Как отключить «заголовок» для всех подзапросов Firebird - PullRequest
0 голосов
/ 28 мая 2019

У меня есть запрос на Firebird с конкатенацией и использованием вложенных select и list (), а затем записал это в файл. Первая команда: SET HEADING OFF;

SET HEADING OFF;
SELECT DISTINCT '"' || REPLACE(TRIM(COALESCE(x.column, '')), '"', '""')
|| '"; "' || REPLACE(TRIM(COALESCE(x.column2, '')), '"', '""')
|| '"; "' || REPLACE(TRIM(COALESCE(list(DISTINCT x.column3, ','), '')), '"', '""')
|| '";'
FROM (
     SELECT ycolumn AS column, ycolumn1 AS column1, ycolumn2 AS column2, list(DISTINCT ycolumn3, ',') AS column3
FROM (
     SELECT d.column AS ycolumn, c.column1 AS ycolumn1, dc.column2 AS ycolumn2, ws.column3 AS ycolumn3
     FROM ...
     )y
     GROUP BY ycolumn, ycolumn1, ycolumn2
) x
GROUP BY x.column, x.column1, x.column3
;

Проблема в том, что заголовки для вложенных команд SELECT не отключены, а выходной файл выглядит следующим образом:

==============================================================================
            0:218
==============================================================================
CONCATENATION:
"field"; "field1"; "field2"; "field3";

Можно ли отключить заголовки для всех запросов?

1 Ответ

0 голосов
/ 28 мая 2019

Проблема в том, что LIST создает BLOB SUB_TYPE TEXT, а ISQL по умолчанию использует конфигурацию BLOBDISPLAY, установленную на 1 (для отображения BLOB SUB_TYPE TEXT).С этим параметром ISQL будет автоматически выводить все текстовые BLOB-объекты в строке для каждой строки, но чтобы определить, какой BLOB-объект является каким-либо, он будет включать псевдоним столбца при отображении содержимого BLOB-объекта.

Вы можете отключить отображение blobdisplay с помощью SET BLOBDISPLAY OFF, но тогда в результате вашего запроса будет отображаться только идентификатор blob-идентификатора, а не его содержимое, что, вероятно, не то, что вам нужно.Для запроса в вашем вопросе будет отображаться только:

            0:218

Альтернативой является приведение запроса к VARCHAR достаточного размера:

SELECT DISTINCT cast('"' || REPLACE(TRIM(COALESCE(x.column, '')), '"', '""')
|| '"; "' || REPLACE(TRIM(COALESCE(x.column2, '')), '"', '""')
|| '"; "' || REPLACE(TRIM(COALESCE(list(DISTINCT x.column3, ','), '')), '"', '""')
|| '";' as varchar(8191))
FROM ...

Макс. VARCHAR размера.равно 8191 для набора символов UTF8 или 32765 для однобайтового набора символов, но существуют дополнительные ограничения на длину строки (максимум 64 КБ).

...