无法读取:变量是数组
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
一次只能获取一个。)
我试图从我的 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
一次只能获取一个。)