Intersystems Cache:Embed SQL始终只返回第一行

时间:2016-07-11 09:45:22

标签: intersystems-cache intersystems

我从off复制了代码。文档:

let input_thread = thread::spawn(move || {
    input_tx.send(Command::Quit);
});

但由于某种原因,它只返回第一行的所有字段而没有其他内容。这是一个错误,还是我做错了?

2 个答案:

答案 0 :(得分:5)

您需要使用游标循环遍历SQL查询结果行。

&sql(declare c1 cursor for SELECT *,%ID INTO :tflds()   
    FROM Sample.Person)

&sql(open c1)
for  {
  &sql(fetch c1)
  quit:SQLCODE'=0
  set firstflds=14
  for i=0:1:firstflds {
      if $Data(tflds(i)) {
          write "field ",i," = ",tflds(i),!
      }
  }
  write "===NEXT ROW===",!
}

&sql(close c1)

有关详细信息,请参阅http://docs.intersystems.com/latest/csp/docbook/DocBook.UI.Page.cls?KEY=GSQL_esql#GSQL_esql_cursor

答案 1 :(得分:1)

嵌入式SQL是性能敏感操作的好工具,但如果需要检索多行,确实难以处理。所有这些游标业务都很痛苦。

请考虑使用动态SQL。它有很好的结果集 - 就像界面一样。