无法读取:变量是数组

Can't read: variable is array

我试图从我的 sql 语句中提取所有数据,但我只能提取第一个 put 语句中的第一行数据。所以我想做的是通过 $data 变量做一个 for 循环。 for 循环不会 运行 因为它说变量是一个数组。

orasql crsr $sql
orafetch $crsr -datarray data -indexbyname
puts $data(customer)
foreach value $data {
    puts $data(customer)
}

问题是当你做 foreach value $data;由于 data 变量是一个 数组 ,您不能将其作为简单值读取。要打印数组中的键和值,请执行以下操作:

foreach {key value} [array get data] {
    puts "$key => $value"
}

array get 命令获取数组变量的 name 并从中获取键和值列表,可以用双变量迭代foreach。 (parray 命令做了一个更复杂的版本;您可以使用 parray data 代替上面的循环,但这样您就没有真正的其他途径来处理该行。)

您通常应该知道从 SQL 查询中返回的列的名称,这样您就不需要像那样遍历它。此外,列的顺序并不重要,但数组中条目的顺序也不重要。 (查询结果集中行的顺序很重要,但 orafetch 一次只能获取一个。)