1

我正在将查询结果卸载到文件中。我需要将结果记录显示在一行中。例如,

unload to file.unl select col from table where col = "test";

结果 file.unl 就像

test|
test|
....
test|

但我想得到的是,

test|test|test|....|test|

任何指导或想法表示赞赏。

谢谢

4

2 回答 2

2

您可能知道您可以DELIMITER "|"在 SQL 中或通过 DBDELIMITER 环境变量进行声明。据我所知,没有办法将默认记录终止符更改NEWLINE为其他任何内容。

因此,我怀疑您将需要编写一个自定义函数来迭代结果并将它们附加到一个变量中,然后将其写出到一个文件中,或者编写一个单独的脚本,您可以通过RUN该脚本将数据从行转换为列,例如:

UNLOAD TO file.unl SELECT col FROM table WHERE ...;    
RUN "/usr/bin/perl -ni -e 'chomp; print' file.unl";

我假设你在 Unix 上运行并且有 perl。如果您不这样做,您可能会发现迭代器建议比在 Windows 上安装 perl 更实用,特别是如果您对运行此代码的机器的控制有限。

更新

我的 4GL 很生锈,但我描述的是一些非常基本的东西,例如:

DEFINE command CHAR(10100)
DEFINE long_string CHAR(10000)
DECLARE curs1 CURSOR FOR
  SELECT col FROM table WHERE ...

FOREACH curs1 INTO col1
    LET long_string = long_string CLIPPED || col1 CLIPPED || '|'
END FOREACH
LET command = "echo '" || long_string CLIPPED || "' > file.unl"
RUN command

我写任何 4GL 已经 15 年或更长时间了,所以请把它当作伪代码。可能有更好的方法可以直接写入文件,我真的不记得了。

于 2012-07-07T07:11:50.027 回答
1

CREATE Table #Table ( PKey INT 主键,字段 VARCHAR(10) )

INSERT INTO #Table 选择 1,'ABS1' UNION ALL 选择 2,'ABS2' UNION ALL 选择 3,'ABS3'

声明 @results VARCHAR(MAX) = ''

从#Table 中选择@results = COALESCE(@results + '|' + Field, @results)

选择@结果

于 2012-07-06T10:21:12.537 回答