web-dev-qa-db-ja.com

数値の列を変数のコンマで読み込む

Sqlldrを使用して、フィールドの1つとして数値を持つファイルをロードしています。

問題は、いくつかのレコードでは数値にコンマが含まれているが、他のレコードでは含まれていないことです。

だから何かのようなこと

num "to_number(:num, '999,999,999.99')",

コンマを使用してレコードをロードしますが、コンマを使用せずに

num "to_number(:num)",

コンマなしのものだけをロードします。

Oracle(sqlldr)にコンマがオプションであることを伝える方法はありますか?

4
Isaac Kleinman

どうぞ:

SQL> desc loadertst;
 Name                                      Null?    Type
 ----------------------------------------- -------- ----------------------------
 COL1                                               NUMBER

SQL> !cat loadertst.ctl
load data
infile *
into table loadertst
fields terminated by ',' enclosed by '"'
(
col1 "to_number(replace(:col1,',',''))"
)
begindata
"123456"
"1,2,3,4,5,6"

SQL> !sqlldr phil/phil control=loadertst.ctl

SQL*Loader: Release 11.2.0.2.0 - Production on Thu Nov 29 23:33:17 2012

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

Commit point reached - logical record count 2

SQL> select count(*) from loadertst;

  COUNT(*)
----------
         2

SQL>

データに合わせてfields terminated by ',' enclosed by '"'部分をいじる必要があることは明らかです。

6
Philᵀᴹ