2017-05-03 3 views
0

I Shell-Skript bin mit einem Export in sqlplusSqlplus - Export und Spule Ergebnis

Spool auszuführen:

SET echo off 
SET linesize 32767 
SET LONG 1000 
SET LONGCHUNKSIZE 1000 
SET wrap off 
SET heading off 
SET colsep ';' 
SET pagesize 0 
SET feed off 
SET termout off 
SET trimspool off 

SELECT 
AUTO_SEQ.nextval as ROW_ID, 
.. 
.. 

Und das Ergebnis:

29419987;FOR_IMPORT;1000   ;KR 19 F 65 73                                          ;KR 19 F 65 73, 47001, 47000                                                       ;SANTA MARTA                                                                                        ;Cargado por EIM en 03-MAY-17   ;KR 19 F 65 73, 47001, 47000                        ;KR 19 F 65 73, 47001, 47000                        ;KR 19 F 65 73, 47001, 47000                        ;MAGDALENA                                                                                        ;   ;COLOMBIA;               ;               ;                       ; ;   ;Y;N;Y 

Das Ergebnis hat viele Leerzeichen vor und/oder nach den Daten, so meine Frage ist, wie kann ich sie entfernen?

Vielen Dank im Voraus.

Antwort

0

Die Einstellung colsep stoppt nicht die Ausgabe der Ergebnisse in Spalten. Dies bedeutet, dass die Werte in jeder Zeile immer noch auf die gleiche Länge aufgefüllt werden. Ich würde vergessen colsep und stattdessen die Werte zusammen mit dem Begrenzer verketten:

SELECT 
    AUTO_SEQ.nextval 
    ||';'|| column1 
    ||';'|| column2 
    ... 
    ||';'|| columnN 
FROM 
    ... 

, dass eine einzelne Spalte Ausdruck gibt, wobei keine zusätzlichen Leerzeichen eingefügt.

Sie können müssen String-Wert sin doppelte Anführungszeichen umschließen, wenn sie das Trennzeichen selbst enthalten könnten (obwohl das hängt davon ab, wer dies verbrauchen wird), und Sie können diese auch verketten. Sie sollten Daten auch explizit als Strings usw. formatieren, wenn Sie es nicht bereits sind.

1

holen Sie sich einfach die aktuelle Version von SQL Plus, und Sie werden gut gehen

SQL> set markup csv on 
SQL> select * from scott.emp; 

"EMPNO","ENAME","JOB","MGR","HIREDATE","SAL","COMM","DEPTNO" 
7369,"SMITH","CLERK",7902,"17-DEC-80",800,,20 
7499,"ALLEN","SALESMAN",7698,"20-FEB-81",1600,300,30 
7521,"WARD","SALESMAN",7698,"22-FEB-81",1250,500,30 
7566,"JONES","MANAGER",7839,"02-APR-81",2975,,20 
7654,"MARTIN","SALESMAN",7698,"28-SEP-81",1250,1400,30 
7698,"BLAKE","MANAGER",7839,"01-MAY-81",2850,,30 
7782,"CLARK","MANAGER",7839,"09-JUN-81",2450,,10 
7788,"SCOTT","ANALYST",7566,"09-DEC-82",3000,,20 
7839,"KING","PRESIDENT",,"17-NOV-81",5000,,10 
7844,"TURNER","SALESMAN",7698,"08-SEP-81",1500,,30 
7876,"ADAMS","CLERK",7788,"12-JAN-83",1100,,20 
7900,"JAMES","CLERK",7698,"03-DEC-81",950,,30 
7902,"FORD","ANALYST",7566,"03-DEC-81",3000,,20 
7934,"MILLER","CLERK",7782,"23-JAN-82",1300,,10