我有这样的表:
table1.csv
Item;Location;Oftr;OftrPost;Replen
B01;BI1_p;40;01.05.2015;2
B02;BI1_p;40;01.05.20
我想生成一个.sql外部表脚本。以下是样本:
CREATE TABLE filename*
(
row* type*
row* type*
row* type*
) ORGANIZATION EXTERNAL (
TYPE ORACLE_LOADER
DEFAULT DIRECTORY dir_name*
ACCESS PARAMETERS (
RECORDS DELIMITED BY NEWLINE
SKIP 1
FIELDS TERMINATED BY delimiter*
MISSING FIELD VALUES ARE NULL
)
LOCATION(filename*)
)
reject limit unlimited;
filename,delimiter,dir_name和row不会成为问题(很少有checboxes,readline,path.getiflename)。问题是类型*。 基本上我会在3/4变量之间移动 - 浮点数,数字,varchar,(如果可以的话,日期) 问题是 - 如何识别哪个列有数字或浮点数或varchar? 我的第一个想法是REGEXP,但也许有人有更好的想法。
答案 0 :(得分:1)
你可以为int,float和date定义一些Regex,如果它们都不匹配,那么它就是一个varchar。或者您可以使用int|double|DateTime.TryParse()
,如果它们都没有成功,则将其视为varchar。
但要注意不仅要检查数据的第一行,还要检查其中的一些(如果可能的话,更好地检查所有数据 - 无论如何你都必须解析它们)。还要确保在检查double之前检查int,因为对于整数,double.TryParse()
也将返回true。如果你使用正则表达式,请确保double的正则表达式也可以接受整数,因为你可能在列中应该加倍而没有小数位的数字。
答案 1 :(得分:0)