我应该如何转义Oracle SQLLoader(sqlldr)导入的引号和换行符?

时间:2009-06-24 19:57:53

标签: database oracle sql-loader import

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

我无法通过sqlldr 创建文件以导入Oracle数据库。

列需要用“〜”分隔(不要问。)在创建文件文件时,我对sqlldr在报价和换行方面的行为方式有一些顾虑。

如果要包含列值的简单行:

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

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

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

我想用FIELDS TERMINATED BY“〜”OPTIONALLY ENCLOSED by CTL文件中指定的内容很容易导入。我不知道如何处理是我创建文件时引用的引号那些是否应该另外逃脱?怎么样?

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

one~Line
Break~three

我可以使用CTL文件中的一个选项将这些选项“拼接”回来吗?中断可能发生在不同的列中,每个记录或列可能有多个中断。

提前致谢!

1 个答案:

答案 0 :(得分:1)

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

使用

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

在CTL文件和

的表结构中
key:number, msg:varchar2

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

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

因此,如果数据包含分隔符,则引用整个值并用2引号替换值中的引号。

至于新行,我将在另一个问题中提出这个问题。