微博营销网站,强比网站建设,怎么用h5网站做动效,个人主页展示店铺如果您在封闭的字段中没有管道#xff0c;则可以从控制文件中执行此操作。如果你可以在一个字段中同时拥有管道和双引号#xff0c;那么我认为你别无选择#xff0c;只能对这些文件进行预处理。你的解决方案[1]#xff0c;取代双引号with an SQL operator#xff0c;发生得…如果您在封闭的字段中没有管道则可以从控制文件中执行此操作。如果你可以在一个字段中同时拥有管道和双引号那么我认为你别无选择只能对这些文件进行预处理。你的解决方案[1]取代双引号with an SQL operator发生得太晚无法发挥作用;在执行SQL步骤之前SQL * Loader已经解释了分隔符和附件。您的解决方案[2]忽略外壳将与[1]结合使用 - 直到其中一个字段确实包含管道字符。并且解决方案[3]具有与全局使用[1]和/或[2]相同的问题。有时作为分隔符的标点符号也必须包含在数据中。为了实现这一点两个相邻的分隔符字符被解释为字符的单个匹配项并且该字符包含在数据中。换句话说如果您在字段内重复双引号那么它们将被转义并显示在表数据中。由于无法控制数据生成因此您可以预处理文件以使用转义双引号替换所有双引号。除非您不想替换所有这些 - 实际上真正的外壳不应该被转义。您可以使用正则表达式来定位相关字符将跳过其他人。不是我强大的领域但我认为你可以用lookahead and lookbehind assertions做到这一点。如果你有一个名为orig.txt的文件其中包含1|A|B|C|D2|A|B|CD3|A|B|C|D4|A|B|CD|EFG|H你可以这样做perl -pe s/(? new.txt这会查找一个双引号它不在行开始锚点或管道符号之前;并且后面没有管道字符或行尾锚点;并且只替换那些带有转义(加倍)双引号的人。这将使new.txt包含1|A|B|C|D2|A|B|CD3|A|B|C|D4|A|B|CD|EFG|H字段开头和结尾的双引号不会被修改但中间的双引号现在被转义。如果您随后使用带有双引号机箱的控制文件加载了该文件load datatruncateinto table t42fields terminated by | optionally enclosed by (col1,col2,col3,col4)然后你最终得到select * from t42 order by col1;COL1 COL2 COL3 COL4---------- ---------- ---------- --------------------1 A B C|D2 A B CD3 A B C|D3 A B CD|EFG|H希望与原始数据匹配。可能存在不起作用的边缘情况(如双引号后跟字段中的管道)但是对于尝试解释其他人的数据可以做什么是有限制的...可能还有(很多)当然更好的正则表达模式。如果数据文件是(或可以)在Oracle目录中并且您具有正确的权限您还可以考虑使用an external table而不是SQL * Loader。您仍然需要修改该文件但您可以使用preprocessor指令自动执行该操作而不是在调用SQL * Loader之前需要显式执行此操作。