Perl:for(min .. max)使用随机顺序,但我希望它按顺序0,1,2,

时间:2015-01-29 15:11:33

标签: sql excel oracle perl for-loop

因为我是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)

1 个答案:

答案 0 :(得分:5)

按照您期望的顺序插入行。我相信这里错误的假设是SELECT将按照它们重新插入的顺序返回行。这不是真的。虽然实现可能使它看起来像,但 SELECT没有默认顺序。你认为一个表基本上就像一个大的列表,INSERT正在添加到它的末尾,而SELECT只是迭代它。这不是一个糟糕的近似值,但它可能会导致你做出错误的假设。实际情况是,您可以对表格的存储方式进行一点肯定。

SQL是declarative language,这意味着您告诉计算机您想要什么。这与您告诉计算机要做什么的大多数其他语言类型不同。 SELECT * FROM sometable说&#34;给我表中的所有行和所有列&#34;。由于您没有下订单,因此数据库可以按照自己喜欢的顺序返回它们。与程序意义形成对比,该程序意义将“遍历表格中的所有行”#34;好像桌子是某种列表。

大多数语言都鼓励您利用数据的存储方式。声明性语言阻止您了解数据的存储方式。

如果您想要订购SELECT,则必须给它ORDER BY