2017-09-19 3 views
1

Ich spooling zu CSV-Dateien einige Werte aus einer Oracle-Tabelle. Jeder Wert muss durch ein Semikolon getrennt werden. Die Abfrage, die ich die Daten aus abzurufen ist wie folgt:Oracle | Abfrageausgabe getrennt durch Semikolons

select TEST1|| ';' || 
to_char(BATCH_DATE,'DD/MM/YYYY')|| ';' || 
to_char(START_TIME,'DD/MM/YYYY HH24:MI:SS') || ';'|| 
to_char(END_TIME,'DD/MM/YYYY HH24:MI:SS') || ';'|| 
INPUT 
from TEST_TABLE 
where to_char(BATCH_DATE,'YYYYMM') = to_char(sysdate,'YYYYMM')-1 
and TEST1='ENGLISH' 
order by TEST1,BATCH_DATE desc; 

Während dies wie ein Zauber funktioniert, würde Ich mag auch ein Semikolon am Ende von INPUT haben.

ich erwartet hatte (und versucht) so etwas wie dieses:

select TEST1|| ';' || 
    to_char(BATCH_DATE,'DD/MM/YYYY')|| ';' || 
    to_char(START_TIME,'DD/MM/YYYY HH24:MI:SS') || ';'|| 
    to_char(END_TIME,'DD/MM/YYYY HH24:MI:SS') || ';'|| 
    INPUT || ';'|| 
    from TEST_TABLE 
    where to_char(BATCH_DATE,'YYYYMM') = to_char(sysdate,'YYYYMM')-1 
    and TEST1='ENGLISH' 
    order by TEST1,BATCH_DATE desc; 

Aber es nicht funktioniert, gibt es ORA-00936: Ausdruck fehlt.

Antwort

1

Sie haben einen redundanten Verketten Operator (||) am Ende Ihrer Auswahlliste:

select TEST1|| ';' || 
to_char(BATCH_DATE,'DD/MM/YYYY')|| ';' || 
to_char(START_TIME,'DD/MM/YYYY HH24:MI:SS') || ';'|| 
to_char(END_TIME,'DD/MM/YYYY HH24:MI:SS') || ';'|| 
INPUT || ';' 
-- || removed^
from TEST_TABLE 
where to_char(BATCH_DATE,'YYYYMM') = to_char(sysdate,'YYYYMM')-1 
and TEST1='ENGLISH' 
order by TEST1,BATCH_DATE desc; 

By the way, die Sie erwähnen nicht, wie Sie das Spooling tun, aber wenn Sie mit SQL * Plus, Sie können einfach das Spaltentrennzeichen festlegen, anstatt sich mit der Verkettung herumärgern zu müssen:

-- separate columns with a semicolon 
set colsep ; 

spool myfile.csv 

-- Straight forward query, no concatination required: 
select TEST1, 
     to_char(BATCH_DATE, 'DD/MM/YYYY') 
     to_char(START_TIME, 'DD/MM/YYYY HH24:MI:SS') 
     to_char(END_TIME, 'DD/MM/YYYY HH24:MI:SS') 
     input 
    from TEST_TABLE 
    where to_char(BATCH_DATE, 'YYYYMM') = to_char(sysdate, 'YYYYMM') - 1 and 
     TEST1='ENGLISH' 
order by TEST1, BATCH_DATE desc; 

spool off 
+0

Das ist richtig. Vielen Dank :) –

+1

Sie sind so hilfreich, vielen Dank –

Verwandte Themen