因为我是perl,oracle sql和其他一切的初学者。我必须编写一个脚本来解析excel文件并将值写入oracle sql数据库。
到目前为止一切都很好。但它以随机顺序将行写入数据库。
for ($row_min .. $row_max) {...insert into db code $sheetValues[$_][col0] etc...}
我不明白为什么以随机顺序插入行?
显然我怎样才能让它们按顺序排列? excel_row 0 => db_row 0
等等......
数组中的值是有序的!行数是动态的。
感谢您的帮助,我希望您能获得所需的所有信息。
编辑:
&parseWrite;
sub parseWrite {
my @sheetValues;
my $worksheet = $workbook->worksheet(0);
my ($row_min, $row_max) = $worksheet->row_range();
print "| Zeile $row_min bis $row_max |";
my ($col_min, $col_max) = $worksheet->col_range();
print " Spalte $col_min bis $col_max |<br>";
for my $row ($row_min .. $row_max) {
for my $col ($col_min .. $col_max) {
my $cell = $worksheet->get_cell ($row,$col);
next unless $cell;
$sheetValues[$row][$col] = $cell->value();
print $sheetValues[$row][$col] .
"(".$row."," .$col.")"."<br>";
}
}
for ($row_min .. $row_max) {
my $sql="INSERT INTO t_excel (
a,b,c,d,e
) VALUES (
'$sheetValues[$_][0 ]',
'$sheetValues[$_][1 ]',
'$sheetValues[$_][2 ]',
'$sheetValues[$_][3 ]',
'$sheetValues[$_][4 ]',
'$sheetValues[$_][5 ]'
)";
$dbh->do($sql);
}
}
顺便说一句,我的意思是我的PL / SQL Developer 8.0.3(由我公司提供)
以SELECT * FROM t_excel;
PIC
但是数组中的shell = (2,0), maggie = (0,0) and 13 = (1,0)
。
答案 0 :(得分:5)
按照您期望的顺序插入行。我相信这里错误的假设是SELECT将按照它们重新插入的顺序返回行。这不是真的。虽然实现可能使它看起来像,但 SELECT没有默认顺序。你认为一个表基本上就像一个大的列表,INSERT正在添加到它的末尾,而SELECT只是迭代它。这不是一个糟糕的近似值,但它可能会导致你做出错误的假设。实际情况是,您可以对表格的存储方式进行一点肯定。
SQL是declarative language,这意味着您告诉计算机您想要什么。这与您告诉计算机要做什么的大多数其他语言类型不同。 SELECT * FROM sometable
说&#34;给我表中的所有行和所有列&#34;。由于您没有下订单,因此数据库可以按照自己喜欢的顺序返回它们。与程序意义形成对比,该程序意义将“遍历表格中的所有行”#34;好像桌子是某种列表。
大多数语言都鼓励您利用数据的存储方式。声明性语言阻止您了解数据的存储方式。
如果您想要订购SELECT,则必须给它ORDER BY。