1

第一:是的,我知道 CONCATENATE 和 CONTINUEIF,但我可能不够聪明,无法理解文档。我不“明白”他们如何解决我的问题。谢谢...

我必须创建一个文件以通过 sqlldr 导入 Oracle DB。

列需要用“~”分隔(不要问。)在创建文件文件时,我对 sqlldr 在引号和换行符方面的行为方式有一些担忧。

如果一个简单的行包含列值:

One, Hello~World I "Like" you, and Three

我应该如何将其输出到文件中?我的第一个猜测是

One~"Hello~World I "Like" you"~Three

我想用 CTL 文件中指定的 FIELDS TERMINATED BY "~" OPTIONALLY ENCLOSED BY '"' 导入会很容易。当我创建文件时,我不知道如何处理 Like 周围的引号。那些应该还要逃走?怎么逃?

额外的奖励问题:这些字段可能包含线刹车。如果写出“原始”,它将变成

one~Line
Break~three

CTL 文件中是否有一个选项可用于将它们“缝合”在一起?中断可能发生在不同的列中,并且每条记录或列可能有多个中断。

提前致谢!

4

1 回答 1

2

经过一些实验,这是我发现的:

使用时

FIELDS TERMINATED BY "~" OPTIONALLY ENCLOSED BY '"' 

在 CTL 文件和表结构中

key:number, msg:varchar2

处理引号和分隔符的正确方法是

1~Hello World
2~"Hello~World"
3~"Hello ""World"""
4~"Hello~""World"""

So, If the data contains the delimiter, quote the whole value and replace quotes in the value with 2 quotes.

As far as newlines go, I am going to ask that in another question.

于 2009-06-26T13:46:05.817 回答