sql >> Databáze >  >> RDS >> Oracle

Zavaděč SQL - druhý řetězec není přítomen

Pokud je vaše poslední pole vždy přítomno (ačkoli trailing nullcols naznačuje, že není) a máte určitou kontrolu nad formátováním, můžete použít CONTINUEIF direktiva pro zpracování druhého řádku jako součásti stejného logického záznamu.

Pokud comments pole je vždy přítomno a uzavřeno ve dvojitých uvozovkách, pak můžete:

...
truncate
continueif last != x'22'
into table ...

Které by zpracovávaly datové záznamy jako:

S;Y;"Test 1"
F;N;"Test 2"
P;Y;"Test with
new line"
P;N;""

Nebo pokud máte za polem komentářů vždy oddělovač, ať už je vyplněno nebo ne:

...
truncate
continueif last != ';'
into table ...

Což by zvládlo:

S;Y;Test 1;
F;N;"Test 2";
P;Y;Test with
new line;
P;N;;

Oba způsoby načtou data jako:

S M COMMENTS
- - ------------------------------
S Y Test 1
F N Test 2
P Y Test withnew line
P N

Tím se ale ztratí nový řádek z dat. Chcete-li to zachovat, je třeba, aby byl přítomen koncový oddělovač pole a namísto CONTINUEIF oddělovač záznamů můžete změnit pomocí formátu záznamu streamu :

...
infile 'C:\Users\lab.csv' "str ';\n'"
truncate
into table ...

"str ';\n'" definuje zakončení jako kombinaci zakončení pole a znaku nového řádku. Váš rozdělený komentář má tuto kombinaci pouze na posledním řádku. Se stejným datovým souborem jako předchozí verze to dává:

S M COMMENTS
- - ------------------------------
S Y Test 1
F N Test 2
P Y Test with
    new line

P N

4 rows selected.

Protože používáte Windows, možná budete muset zahrnout \r i ve formátu, např. "str ';\r\n'" , ale nemohu to zkontrolovat.



  1. OracleSQL převádí pole Datum do jiného časového pásma

  2. Záhlaví uživatelského agenta - zkratka pro ukládání mysql

  3. Pro přihlášení GET nebo POST?

  4. Jak nasadit server MariaDB do kontejneru Docker