问题描述
Oracle数据库12c企业版版本12.1.0.2.0-64位生产
我正在使用以下代码来创建外部表。
文件包含13080记录。13070记录被加载到外部表中。
只有一条被拒绝的记录被加载到外部表的坏文件中。为什么?我在等10点。
数据看起来不错,并且与数据类型和长度匹配。如何识别确切原因?
我感谢所有专家的任何建议/帮助。
我正在使用以下代码来创建外部表。
V_SQL := 'CREATE TABLE ' || L_EXT_TABLE || ' (' || L_CNAMES || ')
ORGANIZATION EXTERNAL (
TYPE ORACLE_LOADER
DEFAULT DIRECTORY ' || P_DIR || '
ACCESS PARAMETERS(
RECORDS DELIMITED BY NEWLINE CHARACTERSET WE8MSWIN1252
BADFILE ''' || L_EXT_TABLE || '.bad''
' || CASE WHEN P_NOLOG THEN ' NOLOGFILE ' ELSE 'LOGFILE '''||L_EXT_TABLE||'.log''' END || '
SKIP ' || P_IGNORE_HEADERLINES || ' FIELDS TERMINATED BY ''' || P_DELIMITER || ''' LDRTRIM
MISSING FIELD VALUES ARE NULL
)
LOCATION( ''' || P_FILENAME || ''')
)
REJECT LIMIT UNLIMITED;
文件包含13080记录。13070记录被加载到外部表中。
只有一条被拒绝的记录被加载到外部表的坏文件中。为什么?我在等10点。
数据看起来不错,并且与数据类型和长度匹配。如何识别确切原因?
我感谢所有专家的任何建议/帮助。
专家解答
我添加了一些缺失值,因此我们可以有一个 * 测试用例 * 并且无法重现您的发现,例如
所以我们需要看到一个从上到下的测试用例。
SQL> host cat c:\temp\xxx.dat
1,2,3
1,2,3
1,2,3
1,2,3
z,z,z
w,s,s
q,q,q
s,s,s
SQL> set serverout on
SQL> declare
2 l_ext_table varchar2(10) := 'mytab';
3 L_CNAMES varchar2(100) := 'c1 number,c2 number,c3 number';
4 P_DIR varchar2(10) := 'TEMP';
5 P_NOLOG boolean := false;
6 P_IGNORE_HEADERLINES varchar2(10) := '1';
7 P_DELIMITER varchar2(10) := ',';
8 P_FILENAME varchar2(10) := 'xxx.dat';
9 v_sql varchar2(1000);
10 begin
11
12 V_SQL := 'CREATE TABLE ' || L_EXT_TABLE || ' (' || L_CNAMES || ')
13 ORGANIZATION EXTERNAL (
14 TYPE ORACLE_LOADER
15 DEFAULT DIRECTORY ' || P_DIR || '
16 ACCESS PARAMETERS(
17 RECORDS DELIMITED BY NEWLINE CHARACTERSET WE8MSWIN1252
18 BADFILE ''' || L_EXT_TABLE || '.bad''
19 ' || CASE WHEN P_NOLOG THEN ' NOLOGFILE ' ELSE 'LOGFILE '''||L_EXT_TABLE||'.log''' END || '
20 SKIP ' || P_IGNORE_HEADERLINES || ' FIELDS TERMINATED BY ''' || P_DELIMITER || ''' LDRTRIM
21 MISSING FIELD VALUES ARE NULL
22 )
23 LOCATION( ''' || P_FILENAME || ''')
24 )
25 REJECT LIMIT UNLIMITED';
26
27 dbms_output.put_line(v_sql);
28 end;
29 /
CREATE TABLE mytab (c1 number,c2 number,c3 number)
ORGANIZATION EXTERNAL (
TYPE ORACLE_LOADER
DEFAULT DIRECTORY
TEMP
ACCESS PARAMETERS(
RECORDS DELIMITED BY NEWLINE CHARACTERSET WE8MSWIN1252
BADFILE 'mytab.bad'
LOGFILE 'mytab.log'
SKIP 1 FIELDS TERMINATED BY ',' LDRTRIM
MISSING FIELD VALUES ARE NULL
)
LOCATION( 'xxx.dat')
)
REJECT LIMIT UNLIMITED
PL/SQL procedure successfully completed.
SQL> CREATE TABLE mytab (c1 number,c2 number,c3 number)
2 ORGANIZATION EXTERNAL (
3 TYPE ORACLE_LOADER
4 DEFAULT DIRECTORY TEMP
5 ACCESS PARAMETERS(
6 RECORDS DELIMITED BY NEWLINE CHARACTERSET WE8MSWIN1252
7 BADFILE 'mytab.bad'
8 LOGFILE 'mytab.log'
9 SKIP 1 FIELDS TERMINATED BY ',' LDRTRIM
10 MISSING FIELD VALUES ARE NULL
11 )
12 LOCATION( 'xxx.dat')
13 )
14 REJECT LIMIT UNLIMITED
15 /
Table created.
SQL> select * from mytab;
C1 C2 C3
---------- ---------- ----------
1 2 3
1 2 3
1 2 3
3 rows selected.
SQL> select * from mytab;
C1 C2 C3
---------- ---------- ----------
1 2 3
1 2 3
1 2 3
3 rows selected.
SQL> host cat c:\temp\mytab.bad
z,z,z
w,s,s
q,q,q
s,s,s
所以我们需要看到一个从上到下的测试用例。
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。




