如何为所有 firebird 子请求禁用 "heading"

How to disable "heading" for all firebird subrequests

我有一个 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 的 headers 没有被禁用,输出文件是这样的:

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

是否可以为所有请求禁用 headers?

问题是 LIST 产生 BLOB SUB_TYPE TEXT,ISQL 默认使用配置 BLOBDISPLAY 设置为 1(以显示 BLOB SUB_TYPE TEXT)。使用此设置,ISQL 将自动输出每行内联的所有文本 blob,但要辨别哪个 blob 是哪个,它会在显示 blob 内容时包括列别名。

您可以使用 SET BLOBDISPLAY OFF 关闭 blob 显示,但是您的查询结果将只显示 blob-id 而不是 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 ...

字符集 UTF8 的最大 VARCHAR 大小为 8191,或单字节字符集的最大 VARCHAR 大小为 32765,但对行长度有额外的限制(总共最大 64KB)。