【问题标题】:Getting error "Error parsing insert statement for table ROOT.LOAD_SQL" while using ltrim in sql loader在 sql loader 中使用 ltrim 时出现错误“解析表 ROOT.LOAD_SQL 的插入语句时出错”
【发布时间】:2019-09-02 07:01:55
【问题描述】:

我尝试使用 sql loader 将数据文件中的数据加载到数据库表 load_sql 中。我在数据文件中有如下数据。

empid,ename
1,Raja,**Kanchi
2,Poo,**Kanchi
3,Bhasker,**Kanchi
4,Siva,**Kanchi

我必须加载才能将其加载到 load_sql 表中,如下格式:

1,Raja,Kanchi
2,Poo,Kanchi
3,Bhasker,Kanchi
4,Siva,Kanchi

我已经编写了一个控制文件,借助 char 操作函数在第三列中插入记录,但我得到了错误:

options(skip = 1,Errors = 100, direct = True)
load data
infile 'D:\SQLLDR\control.ctl'
truncate into table load_sql
when city = 'Kanchi'
fields terminated by ',' 
optionally enclosed by '"'
(
empid,
ename,
X filler,
city "ltrim(:city,*)"
)

我收到类似

的错误
'SQL*Loader-951: Error calling once/load initialization
ORA-02373: Error parsing insert statement for table ROOT.LOAD_SQL.
ORA-00936: missing expression'

【问题讨论】:

    标签: oracle sql-loader


    【解决方案1】:

    您的控制文件中有一些语法错误。试试这个:

    options(skip = 1,Errors = 100, direct = True)
    load data
    infile 'D:\SQLLDR\control.ctl'  <-- This doesn't look like a data file name?
    truncate into table load_sql
    when (city = '**Kanchi')
    fields terminated by ',' 
    optionally enclosed by '"'
    (
    empid,
    ename,
    city "ltrim(:city, '*')"
    )
    

    【讨论】:

      【解决方案2】:
      ltrim(:city,*)
                  ^
                  |
              this is invalid
      

      应该是

      ltrim(:city, '*')
      

      或者,可能,

      replace(:city, '*', '')
      

      【讨论】:

      • 感谢 littlefoot....现在我已将代码更改为 ltrim(:city,'*') 并且我没有收到任何错误,但记录未加载到表中
      • 看起来您的when 条件未得到满足。检查日志文件和丢弃文件。
      • 不客气。至于你的新问题,我同意@William。
      • 正如其他评论员所说,您正在过滤:when city = 'Kanchi' ,但您在文件中得到 '**Kanchi'。
      猜你喜欢
      • 1970-01-01
      • 2018-12-31
      • 1970-01-01
      • 2018-05-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-08-12
      相关资源
      最近更新 更多