2013-07-31 41 views
6

Muszę spoolować csv z tabeli w Oracle, używając sqlplus. Poniżej znajduje się Wymagany format:Formatowanie nagłówka podczas buforowania pliku csv w sqlplus

"HOST_SITE_TX_ID","SITE_ID","SITETX_TX_ID","SITETX_HELP_ID" 
"664436565","16","2195301","0" 
"664700792","52","1099970","0" 

następuje odpowiedni fragment skryptu powłoki pisałem:

sqlplus -s $sql_user/[email protected]$sid <<eof>> /dev/null 
    set feedback off 
    set term off 
    set linesize 1500 
    set pagesize 11000 
    --set colsep , 
    --set colsep '","' 
    set trimspool on 
    set underline off 
    set heading on 
    --set headsep $ 
    set newpage none 


    spool "$folder$filename$ext" 
    select '"'||PCL_CARRIER_NAME||'","'||SITETX_EQUIP_ID||'","'||SITETX_SITE_STAT||'","'||SITETX_CREATE_DATE||'","'||ADVTX_VEH_WT||'"' 
    from cvo_admin.MISSING_HOST_SITE_TX_IDS; 
    spool off 

(Użyłem kilka komentowane oświadczenia w, oznaczać to, co próbowałem ale mogłam „t dostać się do pracy)

wyjście otrzymuję to:

'"'||PCL_CARRIER_NAME||'","'||SITETX_EQUIP_ID||'","'||SITETX_SITE_STAT||'","'||SITETX_CREATE_DATE||'","'||ADVTX_VEH_WT||'"' 
"TRANSPORT INC","113","00000000","25-JAN-13 10.17.51 AM","" 
"TRANSPORT INC","1905","00000000","25-JAN-13 05.06.44 PM","0" 

który pokazuje że nagłówek jest pomieszany - to jest dosłownie drukowanie całego łańcucha, który powinien zostać zinterpretowany jako instrukcja SQL, tak jak w przypadku wyświetlanych danych.

Opcje Zastanawiam:

1) Korzystanie colsep

set colsep '","' 
spool 
select * from TABLE 
spool off 

Wprowadza inne problemy, jak dane mające początkowe i końcowe spacje, pierwsze i ostatnie wartości w plikach nie są ujęte w cudzysłowy

HOST_SITE_TX_ID"," SITE_ID" 
    "    12345","  16" 
    "    12345","  21 

Doszedłem do wniosku, że ta metoda daje mi więcej zgagi niż ta, którą opisałem wcześniej.

2) Pobranie pliku i użycie wyrażenia regularnego w celu zmodyfikowania nagłówka.

3) Pozostawienie nagłówek całkowicie i ręcznie dodając ciąg nagłówka na początku pliku, używając skryptu

Wariant 2 jest bardziej wykonalne, ale nadal był zainteresowany pytaniem, czy nie może być lepiej sposób jakoś sformatować nagłówek, więc przychodzi w zwykłym formacie csv, (rozdzielany przecinkami, z podwójnym cudzysłowem).

Szukam mniej twardego kodowania, jak to możliwe - tabela, którą eksportuję, ma około 40 kolumn i obecnie używam skryptu dla około 4 milionów rekordów - łamiąc je w partii około 10K każdy. Byłbym wdzięczny za wszelkie sugestie, nawet całkowicie różne od mojego podejścia - jestem programistą w nauce.

Odpowiedz

3

ten sposób stworzyłem nagłówka:

set heading off 

/* header */ 
SELECT '"'||PCL_CARRIER_NAME||'","'||SITETX_EQUIP_ID||'","'||SITETX_SITE_STAT||'","'||SITETX_CREATE_DATE||'","'||ADVTX_VEH_WT||'"' 
FROM 
(
     SELECT 'PCL_CARRIER_NAME' AS PCL_CARRIER_NAME 
     ,  'SITETX_EQUIP_ID' AS SITETX_EQUIP_ID 
     ,  'SITETX_SITE_STAT' AS SITETX_SITE_STAT 
     ,  'SITETX_CREATE_DATE' AS SITETX_CREATE_DATE 
     ,  'ADVTX_VEH_WT'  AS ADVTX_VEH_WT 
     FROM DUAL 
) 
UNION ALL 
SELECT '"'||PCL_CARRIER_NAME||'","'||SITETX_EQUIP_ID||'","'||SITETX_SITE_STAT||'","'||SITETX_CREATE_DATE||'","'||ADVTX_VEH_WT||'"' 
FROM 
(
     /* first row */ 
     SELECT to_char(123)     AS PCL_CARRIER_NAME 
     ,  to_char(sysdate, 'yyyy-mm-dd') AS SITETX_EQUIP_ID 
     ,  'value3'      AS SITETX_SITE_STAT 
     ,  'value4'      AS SITETX_CREATE_DATE 
     ,  'value5'      AS ADVTX_VEH_WT 
     FROM DUAL 
     UNION ALL 
     /* second row */ 
     SELECT to_char(456)      AS PCL_CARRIER_NAME 
     ,  to_char(sysdate-1, 'yyyy-mm-dd') AS SITETX_EQUIP_ID 
     ,  'value3'       AS SITETX_SITE_STAT 
     ,  'value4'       AS SITETX_CREATE_DATE 
     ,  'value5'       AS ADVTX_VEH_WT 
     FROM DUAL 
) MISSING_HOST_SITE_TX_IDS; 
5

Prostym sposobem na CSV zawierający tylko jeden nagłówek jest zrobić

set embedded on 
set pagesize 0 
set colsep '|' 
set echo off 
set feedback off 
set linesize 1000 
set trimspool on 
set headsep off 

embedded jest ukryta opcja, ale ważne jest, mieć TYLKO jeden nagłówek

+2

Mam trudności z zobaczeniem, jak to jest odpowiedź na pytanie tutaj zadane. –