【发布时间】:2015-02-15 07:42:14
【问题描述】:
经过一些研究决定在这里提出问题以获得更多专家的答案。找不到确切的场景作为我的问题,所以就在这里......
我认为我需要几天的时间才能让某些东西发挥作用,现在甚至无法考虑如何前进。
数据库:11gR2
操作系统:Unix
我正在尝试使用 perl 脚本将多个 csv 文件加载到 Oracle 表中。
列出我需要处理的所有 csv,因为 csv 文件所在的目录包含许多其他文件。
打开csv文件并插入表格
如果有任何错误,则回滚该文件的所有插入并移至下一个文件
-
记录每个文件完成了多少次插入
#!/usr/bin/perl use warnings; use strict; use Text::CSV; use DBD::Oracle; my $exitStatus = 0; my $dow = `date +%a`; chomp $dow; my $csvDow = `date -dd +%a`; chomp $csvDow; # define logfile my logFile; $logFile = "log.dbinserts" # define csv file directory my $csvLogDir = "Home/log/$csvDow"; # csv Files in array to list all possible match of file opendir(my $dh, $csvLogDir ) || die "can't opendir $csvLogDir : $!"; my @csvFile = grep { /csv.*host1/ && -f "$csvLogDir/$_" } readdir($dh); chomp @csvFile; closedir $dh; foreach my $i (@csvFile) { $logFile (CSV File: $i); } foreach my $file (@csvFile) { chomp ($item); $logFile-> ("Working under: $file"); &insertRecords($csvLogDir."/".$file); } $logFile-> ("Exit status") #---------------- sub insertRecords { my $filetoInsert=shift; my $row; open my $fh, "<" or die "$fileToInsert: $!"; my $csv = Text::CSV->new ({ binary =>1, auto_diag =>1, }); while ($row = $csv->getline ($fh)) { print "first column : $row->[0]\n,"; } close $fh; } ======== CSV File ========= date, host, first, number1, number2 20141215 13:05:08, S1, John, 100, 100.20 20141215 13:06:08, S2, Ray, 200, 200.50 ... ... ... ========= Table - tab1 ========= Sample_Date Server First N1 N2
【问题讨论】:
-
恭喜您使用
use warnings和use strict启动脚本。除此之外,您似乎在这里奇怪地混合了 Perl 4 和 shell 脚本。现在得走了,但如果我回来时你还没有收到答复,我会开始满足你的许多需求。 -
你的问题到底是什么?
-
@tjd 感谢您的评论,是的,我知道我对这个编程很烂:),perl 4 不知道我在哪里使用它,我从我的 perl 5 书中拿走了大部分东西.
-
@AKHolland 基本上我正在尝试打开在昨天(周一)目录中创建的 csv 文件,插入到 Oracle 表中。
-
这就是你想要做的。这不是一个真正的问题。