2017-01-26 6 views
0

유닉스 쉘 스크립트를 사용하여 쿼리 출력을 .txt 파일로 작성하고 싶습니다.오라클 - 유닉스 쿼리

SET PAGESIZE 20000 
SET COLSEP "," 
SET LINESIZE 385 
SET NUMWIDTH 300 
SET WRAP OFF 
SET FEEDBACK OFF 
SET UNDERLINE OFF 
SET ECHO OFF 
SET TRIMSPOOL OFF 
SET TAB OFF 

COLUMN NSC Format a8 
COLUMN STATUS Format a6 
COLUMN GEO_CD Format a6 
COLUMN COUNTRY Format a7 
COLUMN LATA Format a4 
COLUMN COMMUNITY_NAME a14 
COLUMN COUNTY a6 
COLUMN STREET_NUM1 a11 
COLUMN POSTAL_CD a9 

SPOOL NRM1.txt 

SELECT GEO_SITE_CD||GEOP_SITE_CD||NW_SITE_CD NSC,STUS_CD STATUS,GEOP_SITE_CD GEO_CD,CTRY_CD COUNTRY,GEO_LATA_CD LATA,NVL(CURR_GEO_SITE_NME,GEO_SITE_NME) COMMUNITY_NAME, 
CNTY_NME COUNTY,'"'||RPAD(NVL(TRIM(ADR_STREET_NBR),'    '),15,' ')||'"' STREET_NUM1, 
PSTL_CD POSTAL_CD 
FROM CLONE_NW_SITE 
WHERE CTRY_CD IN ('USA','PRI','VRI') 
AND ROWNUM < 100 
ORDER BY NSC; 

SPOOL OFF 

출력은 다음과 같습니다 :

NSC  ,STATUS,GEO_CD,COUNTRY,LATA,COMMUNITY_NAME            ,COUNTY          ,STREET_NUM1             ,POSTAL_CD      
ABITPR01,A  ,PR ,PRI , ,AIBONITO (AIBONITO)           ,AIBONITO          ,"    "            ,00705    

필요한 출력은 다음과 같습니다 : 다음은 내 코드입니다 STREET_NUM1를 들어

NSC  ,STATUS,GEO_CD,COUNTRY,LATA,COMMUNITY_NAME            ,COUNTY          ,STREET_NUM1,POSTAL_CD      
ABITPR01,A  ,PR ,PRI , ,AIBONITO (AIBONITO)           ,AIBONITO          ,"    ",00705    

- 나는 RPAD/NVL을 사용, 그것은 헤더의 크기를 변경하고 ""값 뒤에 - 여분의 공백이 45 개 있습니다. 나는 그 사람들을 원하지 않는다.

모든 의견을 환영합니다. 미리 감사드립니다.

+2

이 질문에 제공된 코드는 UNIX 셸 스크립트가 아닌 *입니다. 이 질문이 유닉스와 전혀 관련이 없다는 것이 나에게 분명하지 않다. –

+0

어떤 Oracle/sqlplus 버전입니까? – BobC

답변

0

ADR_STREET_NBR 열에 값이 이미있는 것 같아서이 문제를 일으키는 길이보다 깁니다. RPAD 뒤에 SUBSTR 기능을 사용하면 문제가 해결됩니다.

또 다른 의견은 NVL에서 ' ' 대신 ''을 사용합니다. RPAD은 가치가 없을 때 패딩 공간을 처리합니다.