首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Sql ldr控制文件

Sql ldr控制文件
EN

Stack Overflow用户
提问于 2019-05-06 22:30:08
回答 1查看 219关注 0票数 0

我的加载器脚本由于字段PATHID的ORA-01722而失败,该字段在控制文件中被定义为整数外部。现在我想检查file的列pathid是否包含Numer值,如果不是number,则作为null插入。我的数据库是oracle。

EN

回答 1

Stack Overflow用户

发布于 2019-05-07 00:42:06

这里有一个例子;看看它是否有帮助。

首先测试表格,以及检查参数值是否为数字的函数。它将在控制文件中使用。

代码语言:javascript
复制
SQL> create table test (pathid number, name varchar2(20));

Table created.

SQL> create or replace function f_isnum (par_value in varchar2)
  2    return varchar2
  3  is
  4    -- if PAR_VALUE is a number, return Y. Otherwise, return N
  5  begin
  6    return case when regexp_like(par_value, '^\d+$') then 'Y' else 'N' end;
  7  end;
  8  /

Function created.

SQL>

控制文件,其中还包含一些示例数据。检查PATHID字段,该字段使用先前创建的函数。

代码语言:javascript
复制
load data 
infile *
replace
into table test
fields terminated by "|" TRAILING NULLCOLS 
(
pathid integer external "case when f_isnum(:pathid) = 'Y' then :pathid else null end",
name)

begindata
123|Littlefoot
xxx|Invalid one
125|This is OK

测试:

代码语言:javascript
复制
SQL> $sqlldr scott/tiger control=test07.ctl log=test07.log

SQL*Loader: Release 11.2.0.2.0 - Production on Pon Svi 6 18:41:12 2019

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

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

SQL> select * From test;

    PATHID NAME
---------- --------------------
       123 Littlefoot
           Invalid one
       125 This is OK

SQL>
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56007243

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档