如何为所有 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)。
我有一个 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)。