2017-01-26 2 views
0

Ich möchte nur die Abfrage-Ausgabe in einer TXT-Datei mit Unix-Shell-Skript schreiben. Unten ist mein Code:Oracle - Unix-Abfrage

unter
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 

Ausgabe sieht:

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

Erforderlich Ausgabe sieht unter:

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

Für STREET_NUM1 - I RPAD/NVL verwendet, es ändert sich die Kopfgröße und nach den Werten "" hat es 45 zusätzliche Leerzeichen. Ich will diese nicht.

Alle Vorschläge sind willkommen. Danke im Voraus.

+2

Der Code in dieser Frage ist * nicht * ein UNIX-Shell-Skript. Es ist mir nicht klar, was diese Frage überhaupt mit UNIX zu tun hat. –

+0

Welche Version von Oracle/sqlplus ist das? – BobC

Antwort

0

Es sieht aus wie Wert bereits in ADR_STREET_NBR Spalte vorhanden ist mehr als Ihre gewünschte Länge, die dieses Problem verursacht. Verwenden Sie SUBSTR Funktion nach RPAD und es sollte Ihr Problem lösen.

Ein weiterer Kommentar ist, in NVL'' statt ' ' verwenden. RPAD kümmert sich um Füllräume, wenn Sie keinen Wert haben.