2012-07-06 4 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

+0

@teran : 4GL에서 ** FOR XML PATH .. **를 설명 할 수 있습니까? –

+0

죄송합니다. 4gl을 사용하고 있다는 것에 대해서는 언급하지 않았습니다. 위의 대답은 MS SQL을위한 것입니다; – teran

답변

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"; 

내가 가정 한 당신은 유닉스에서 실행 펄 편리를 가지고 있습니다. 그렇지 않다면 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을 사용 해왔다. 스크립트를 사용하지 않고이를 수행 할 수있는 방법이 있습니까? –

+0

간단한 반복자 예제로 답변을 업데이트했습니다. 나는 여전히 펄 버전이 더 좋다고 생각한다; 우발적 인 쉘 해석으로 인해 코드가 적고 mangling에 덜 취약합니다. – RET

+0

I4GL 코드를 조금 수정했습니다. Perl 메커니즘은 마지막 줄 바꿈을 제외한 모든 줄을 평평하게 만들 것입니다. I4GL 코드는 섬세하고 오버 플로우에 취약합니다. –

1

( PKEY INT 기본 키 필드 VARCHAR가 (10) )

INSERT INTO #Table 1 선택 표 #Table 만들기 ALL 2 선택 'ABS1'UNION ' ABS2 'UNION ALL 3을 선택 는'ABS3 '

SELEC을'

DECLARE는 VARCHAR (MAX) =를 @results ' t @results = COALESCE ( @results + '|'+ 필드, @results ) #Table에서

SELECT @results

+0

이 언어는 무엇입니까 ?? 결과 앞에 @를 사용하는 이유는 무엇입니까? 설명 해주십시오. –

+0

이것은 SQL 쿼리입니다.결과 앞에 @는 모든 결과를 연결하는 varchar 변수를 만드는 것을 의미합니다. 마지막으로 그 결과를 내 결과로 선택합니다. –

+0

@Sarah : 설명해 주셔서 감사합니다. Informix-4GL을 쿼리에 사용하고 있습니다. –

관련 문제