暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

Oracle 加载外部表,用varchar2修剪,不带null

askTom 2018-03-06
416

问题描述

大家好,
我有这个CTL文件:
CREATE TABLE EXT_T_SI_EG_RAI_170630E1166A
(
 WAEHRUNG                       CHAR(3)
,GESCHAEFT_ID                   VARCHAR2(48)
,GESCHAEFTSKATEGORIE            CHAR(1)
,UNTERGESCHAEFT_ID              VARCHAR2(24)
,SL_MELDERECHT                  CHAR(4)
,SL_ANSATZ                      CHAR(3)
,SL_LAUF                        CHAR(3)
)
ORGANIZATION EXTERNAL
(
TYPE ORACLE_LOADER
DEFAULT DIRECTORY DBDIR_TOE_170630E1166A
ACCESS PARAMETERS
(
RECORDS DELIMITED BY NEWLINE
SKIP 1
TERRITORY "AMERICA"
CHARACTERSET WE8ISO8859P1
LOGFILE 't_si_eg_rai.log'
BADFILE 't_si_eg_rai.bad'
FIELDS
REJECT ROWS WITH ALL NULL FIELDS
REJECT ROWS WITH ALL NULL FIELDS
(
WAEHRUNG                       POSITION(2:4) CHAR LRTRIM
,GESCHAEFT_ID                   POSITION(5:52) CHAR LRTRIM
,GESCHAEFTSKATEGORIE            POSITION(53:53) CHAR LRTRIM
,UNTERGESCHAEFT_ID              POSITION(54:77) CHAR LRTRIM NULLIF UNTERGESCHAEFT_ID = BLANKS  
,SL_MELDERECHT                  POSITION(78:81) CHAR LRTRIM
,SL_ANSATZ                      POSITION(82:84) CHAR LRTRIM
,SL_LAUF                        POSITION(85:87) CHAR LRTRIM)
)
)
LOCATION (xxxxxxxx)
)
REJECT LIMIT UNLIMITED


当我加载记录时,字段UNTERGESCHAEFT_ID总是为空

select * from TUKB100.T_si_EG_RAI PARTITION (TP_Si_EG_RAI_170630E1166A)
EUR E1166 30-GIU-17 170630E1166A 000020000168704200001ACC F (null)                        
EUR E1166 30-GIU-17 170630E1166A 0006297CG00000000061785 N   (null)                       
EUR E1166 30-GIU-17 170630E1166A 0006297CG00000000159960 N  (null)                       
EUR E1166 30-GIU-17 170630E1166A 0006297CG00000000232694 N    (null)   


你有什么想法用空白代替NULL吗?

非常感谢你的帮助

专家解答

您想将源文件中的null转换为 “空白”?

当您查询NVL/coalesce时,它将起作用:

declare
  test_file utl_file.file_type;
begin
  test_file := utl_file.fopen('TMP', 'test.txt', 'w');
  utl_file.put_line(test_file, 'c1,,c3');
  utl_file.fclose(test_file);
end;
/

create table t (
  c1 varchar2(10),
  c2 varchar2(10),
  c3 varchar2(10)
) organization external (
  default directory tmp
  access parameters (
    records delimited by newline
    fields terminated by ',' (
      c1, c2 , c3
    )
  )
  location ('test.txt')
) reject limit unlimited;

select c1, nvl(c2, 'BLANK') c2, c3
from   t;

C1   C2      C3   
c1   BLANK   c3 


如果您想在每次查询时保存一些键入,请在视图中进行转换并查询:

create or replace view vw as 
  select c1, nvl(c2, 'BLANK') c2, c3 from t;
  
select * from vw;

C1   C2      C3   
c1   BLANK   c3 

「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论