基于.csv文件生成.sql脚本

时间:2016-05-16 07:44:20

标签: c# oracle csv

我有这样的表:

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,但也许有人有更好的想法。

2 个答案:

答案 0 :(得分:1)

你可以为int,float和date定义一些Regex,如果它们都不匹配,那么它就是一个varchar。或者您可以使用int|double|DateTime.TryParse(),如果它们都没有成功,则将其视为varchar。

但要注意不仅要检查数据的第一行,还要检查其中的一些(如果可能的话,更好地检查所有数据 - 无论如何你都必须解析它们)。还要确保在检查double之前检查int,因为对于整数,double.TryParse()也将返回true。如果你使用正则表达式,请确保double的正则表达式也可以接受整数,因为你可能在列中应该加倍而没有小数位的数字。

答案 1 :(得分:0)

如果您对非代码解决方案感到满意,我们的SQL Developer IDE将为您做到这一点。将其指向CSV,它将为您生成外部表或SQL * Loader脚本。

To get started, right click on Tables node and say 'Import Data'

分步说明here