2012-07-06 18 views
1

我將查詢結果卸載到文件中。我需要將結果記錄顯示在一行中。例如,在單行中追加查詢的結果

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

產生的file.unl會像

test| 
test| 
.... 
test| 

但我想得是,

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

任何指導或想法讚賞。

由於

+0

這將工作http://stackoverflow.com/a/11356573/1216425 – teran 2012-07-06 08:42:03

+0

@teran:你能解釋一下** FOR XML PATH .. **是否必須在4gl中? – 2012-07-06 10:26:25

+0

對不起,我沒有注意到你正在使用4gl。以上答案適用於MS SQL; – teran 2012-07-06 11:17:18

回答

2

你可能知道,你可以在SQL或通過申報DELIMITER "|" 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是很生疏,但我decribing一些非常基本的,如:

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 

這是15年,因爲我寫的任何4GL更多,所以可以把它看成僞代碼最多,請。可能有更好的方法直接寫入文件,我實在不記得了。

+0

我一直在使用Perl。有沒有方法可以在不使用腳本的情況下完成此操 – 2012-07-07 12:59:58

+0

使用簡單的迭代器示例更新了答案。我仍然認爲perl版本更好;它的代碼少,不易受到意外殼體解釋的影響。 – RET 2012-07-08 10:45:08

+0

我已經修復了I4GL代碼。除了最後一個換行符外,Perl機制將會逐漸走向平坦; I4GL代碼很脆弱,容易溢出。 – 2012-07-08 21:07:55

1

CREATE TABLE #Table( PKEY INT主鍵, 字段VARCHAR(10) )

INSERT INTO #Table 選擇1, 'ABS1' UNION ALL 選擇2,' ABS2' UNION ALL 選擇3, 'ABS3'

DECLARE @Results VARCHAR(MAX)= ''

SELEC牛逼 @Results = COALESCE( @Results + '|' +現場, @Results ) 從#Table

SELECT @Results

+0

這是什麼語言?你爲什麼在結果前使用@?請解釋。 – 2012-07-06 10:25:08

+0

這是一個sql查詢。結果之前的@表示我創建了一個varchar變量來連接我的所有結果。我最終選擇這個變量作爲我的結果。 – 2012-07-06 10:29:26

+0

@Sarah:謝謝你解釋..請理解我正在使用Informix-4GL進行查詢。 – 2012-07-06 10:35:10