问题描述
嗨
我有一个使用外部表的问题。未填充字段时,将忽略该字段,并将该值保留在上一列中。我正在使用的SQL排序的一个示例是
例如,如果我有一个包含
目前,数据在查询中显示为
如您所见,第二行和第三行中的数据未在正确的列中显示数据。
如果我将源文件更改为逗号分隔,则似乎可以强制执行正确的列顺序,但tab delimited不会。
有任何想法是否可以解决此问题?
干杯伊恩
我有一个使用外部表的问题。未填充字段时,将忽略该字段,并将该值保留在上一列中。我正在使用的SQL排序的一个示例是
CREATE TABLE "EXT_TABLE_TEST"
("COLUMN1" VARCHAR2(100 BYTE),
"COLUMN2" VARCHAR2(100 BYTE),
"COLUMN3" VARCHAR2(100 BYTE),
"COLUMN4" VARCHAR2(100 BYTE)
)
ORGANIZATION EXTERNAL
( TYPE ORACLE_LOADER
DEFAULT DIRECTORY "DIR"
ACCESS PARAMETERS
( records delimited by newline
BADFILE 'Test.bad'
LOGFILE 'Test.log'
fields terminated by 0x'09'
OPTIONALLY ENCLOSED BY '"'
MISSING FIELD VALUES ARE NULL
)
LOCATION
( "DIR":'Test.txt'
)
)
REJECT LIMIT UNLIMITED;例如,如果我有一个包含
a b c d a c d a b d
目前,数据在查询中显示为
a b c d a c d a b d
如您所见,第二行和第三行中的数据未在正确的列中显示数据。
如果我将源文件更改为逗号分隔,则似乎可以强制执行正确的列顺序,但tab delimited不会。
有任何想法是否可以解决此问题?
干杯伊恩
专家解答
问题来自此:
当您有此子句和字段没有附件 (双引号) 时,数据库会修剪任何前导空格。因此,当源具有两个相邻的选项卡时,第二个将成为下一个字段的 (忽略) 前导空格的一部分。
要克服此问题,请排除以下条款:
OPTIONALLY ENCLOSED BY '"'
当您有此子句和字段没有附件 (双引号) 时,数据库会修剪任何前导空格。因此,当源具有两个相邻的选项卡时,第二个将成为下一个字段的 (忽略) 前导空格的一部分。
要克服此问题,请排除以下条款:
CREATE TABLE "EXT_TABLE_TEST" (
"COLUMN1" VARCHAR2(100 BYTE),
"COLUMN2" VARCHAR2(100 BYTE),
"COLUMN3" VARCHAR2(100 BYTE),
"COLUMN4" VARCHAR2(100 BYTE)
) ORGANIZATION EXTERNAL (
TYPE ORACLE_LOADER
DEFAULT DIRECTORY tmp
ACCESS PARAMETERS
( records delimited by newline
BADFILE 'Test.bad'
LOGFILE 'Test.log'
fields terminated by 0x'09'
MISSING FIELD VALUES ARE NULL
)
LOCATION
( tmp:'test.txt' )
)
REJECT LIMIT UNLIMITED;
declare
f utl_file.file_type;
begin
f := utl_file.fopen ('TMP', 'test.txt', 'w');
utl_file.put_line(f, 'a' || chr ( 9 ) || 'b' || chr ( 9 ) || 'c' || chr ( 9 ) || 'd');
utl_file.put_line(f, 'a' || chr ( 9 ) || chr ( 9 ) || 'c' || chr ( 9 ) || 'd');
utl_file.put_line(f, 'a' || chr ( 9 ) || 'b' || chr ( 9 ) || chr ( 9 ) || 'd');
utl_file.fclose(f);
end;
/
select *
from EXT_TABLE_TEST;
COLUMN1 COLUMN2 COLUMN3 COLUMN4
a b c d
a c d
a b d 文章转载自ASKTOM,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。




