Perl:for (min .. max) 使用随机顺序,但我希望它按顺序 0,1,2,
Perl: for (min .. max) uses random order, but I want it in order 0,1,2,
因为我是 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);
}
}
with in order 我的意思是我的PL/SQL Developer 8.0.3(我公司给的)
显示 SELECT * FROM t_excel;
图片
但数组中shell = (2,0), maggie = (0,0) and 13 = (1,0)
。
正在按照您期望的顺序插入行。我认为这里的错误假设是 SELECT 将 return 行按照插入的顺序排列。这不是真的。虽然实现可能使它看起来像它,但 SELECT 没有默认顺序 。您认为 table 基本上就像一个大列表,INSERT 正在添加到它的末尾,而 SELECT 只是遍历它。这不是一个糟糕的近似值,但它可能会导致您做出错误的假设。现实情况是,对于 table 的存储方式,您几乎无法确定。
SQL 是一个 declarative language,这意味着你告诉计算机 你想要什么。这与您告诉计算机要做什么的大多数其他语言类型不同。 SELECT * FROM sometable
说 "give me all the rows and all their columns in the table"。由于您没有给出命令,因此数据库可以 return 它们以任何它喜欢的顺序排列。与 "iterate through all the rows in the table" 的程序含义对比,就好像 table 是某种列表。
大多数语言都鼓励您利用数据的存储方式。声明式语言使您无法了解数据的存储方式。
如果您想要订购您的 SELECT,您必须给它一个 ORDER BY。
因为我是 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);
}
}
with in order 我的意思是我的PL/SQL Developer 8.0.3(我公司给的)
显示 SELECT * FROM t_excel;
图片
但数组中shell = (2,0), maggie = (0,0) and 13 = (1,0)
。
正在按照您期望的顺序插入行。我认为这里的错误假设是 SELECT 将 return 行按照插入的顺序排列。这不是真的。虽然实现可能使它看起来像它,但 SELECT 没有默认顺序 。您认为 table 基本上就像一个大列表,INSERT 正在添加到它的末尾,而 SELECT 只是遍历它。这不是一个糟糕的近似值,但它可能会导致您做出错误的假设。现实情况是,对于 table 的存储方式,您几乎无法确定。
SQL 是一个 declarative language,这意味着你告诉计算机 你想要什么。这与您告诉计算机要做什么的大多数其他语言类型不同。 SELECT * FROM sometable
说 "give me all the rows and all their columns in the table"。由于您没有给出命令,因此数据库可以 return 它们以任何它喜欢的顺序排列。与 "iterate through all the rows in the table" 的程序含义对比,就好像 table 是某种列表。
大多数语言都鼓励您利用数据的存储方式。声明式语言使您无法了解数据的存储方式。
如果您想要订购您的 SELECT,您必须给它一个 ORDER BY。