Согласно документам: «Имена переменных Tcl могут появляться в операторе SQL [...] в любой позиции, где допустимо помещать строковый или числовой литерал».Таким образом, вы можете сделать:
set LCs [DB eval {SELECT DISTINCT LC FROM MyTable WHERE LC IN (:v1, :v2, :v3)}]
, но вы не можете использовать переменную для полного списка.Вместо этого вам нужно либо построить строку перед передачей ее в DB eval
, либо создать функцию для проверки наличия значения в списке.
Опция # 1:
set LCs [DB eval "SELECT DISTINCT LC FROM MyTable WHERE LC IN ($InString)"]
Опция # 2:
proc check {val} {
global InString
return [expr {$val in $InString}]
}
db function search check
set LCs [DB eval {SELECT LC FROM MyTable WHERE search(LC)}]
Для опции # 2 $ InString должен быть обычным списком Tcl, поэтому не должен разделяться запятыми.