【问题标题】:ignore space in column value while loading data using sql loader by oracleoracle 使用 sql loader 加载数据时忽略列值中的空格
【发布时间】:2019-11-30 11:00:19
【问题描述】:

我正在尝试使用 oracle sql 加载程序加载数据并使用空格作为列的分隔符,但我面临的问题是其中一个列值包括空格,我需要您的支持以避免将此空格视为列分隔符。

我尝试使用 regexp_replace 和替换函数

DSTCOUNTRY " REGEXP_REPLACE(:DSTCOUNTRY,'dstcountry=','')",

列值为:dstcountry="United States"

并且要存储在表中的期望值为: United States

sql 加载器命令是: 加载数据 文件'in' 附加 进入表 test_table 以“”结尾的字段,可选地用“””括起来 尾随 NULLCOLS DSTCOUNTRY " REPLACE(:DSTCOUNTRY,'dstcountry=','')",

我正在使用 oracle 10G 和 12C。

【问题讨论】:

  • 你能分享一下你用来加载数据的SQL loader命令或参数文件吗? - 编辑问题并添加详细信息。
  • 您可能需要使用 Oracle DataPump 实用程序,该实用程序在输入数据方面具有更大的灵活性。您是否还可以编辑您的问题并为您的 Oracle 版本添加标签,例如 Oracle12c

标签: oracle sql-loader


【解决方案1】:

根据您目前发布的内容,您要查找的是optionally enclosed。这是一个例子。

测试表:

SQL> create table test (id number, dstcountry varchar2(20));

Table created.

控制文件(也包含样本数据):

load data 
infile *
replace
into table test
fields terminated by " " 
optionally enclosed by '"'
trailing nullcols
(
id,
dstcountry)

begindata
123 "Croatia"
125 "United States"

加载会话和结果:

SQL> $sqlldr scott/tiger control=test08.ctl log=test08.log

SQL*Loader: Release 11.2.0.2.0 - Production on Pon Srp 22 17:59:23 2019

Copyright (c) 1982, 2009, Oracle and/or its affiliates.  All rights reserved.

Commit point reached - logical record count 1
Commit point reached - logical record count 2

SQL> select * from test;

        ID DSTCOUNTRY
---------- --------------------
       123 Croatia
       125 United States

SQL>

【讨论】:

  • 您好,感谢您的回答,但据此加载程序将考虑 dstcountry="United States" 2 列,因为美国和美国之间有空格?
  • 不客气。你没看到例子吗? “美国”是否加载到两列中?不,不是。
  • 但我的数据如下:dstcountry="United States" 所以我必须使用如下函数:DSTCOUNTRY " REGEXP_REPLACE(:DSTCOUNTRY,'dstcountry=','')" ,
  • 我正在使用函数 REGEXP_REPLACE 从数据中删除部分 dstcountry=。
  • 啊哈。只有国家名称用双引号括起来(例如dstcountry="United States"),而不是整个列值(例如"dstcountry=United States")。替换删除dstcountry=,但SQL Loader 不会将剩余的字符串作为“新”输入,而是使用空格作为字段终止符并仅加载第一个“单词”-United。我不确定您是否可以在 SQL Loader 中修复该问题。考虑预处理文件;通过搜索/替换功能,或者看看你是否可以在没有它的情况下获取文件。
猜你喜欢
  • 1970-01-01
  • 2014-10-22
  • 1970-01-01
  • 1970-01-01
  • 2019-11-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多