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