Tcl Can';t read:变量是数组

Tcl Can';t read:变量是数组,tcl,Tcl,我试图从sql语句中提取所有数据,但只能提取第一个put语句中的第一行数据。所以我要做的是通过$data变量执行for循环。for循环不会运行,因为它表示变量是数组 orasql crsr $sql orafetch $crsr -datarray data -indexbyname puts $data(customer) foreach value $data { puts $data(customer) } 问题是当您对每个值$data执行操作时;由于data变量是一个数组,因此

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

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

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

foreach {key value} [array get data] {
    puts "$key => $value"
}
array get
命令获取数组变量的名称,并从中获取键和值的列表,可以使用双变量
foreach
进行迭代。(使用
parray
命令可以执行更复杂的版本;您可以使用
parray data
代替上面的循环,但这样您就没有处理行的真正其他路径了。)

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