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

Nik*_*sin 2 intersystems intersystems-cache

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

&sql(SELECT *,%ID INTO :tflds()   
        FROM Sample.Person )
   IF SQLCODE=0 {
     SET firstflds=14
     FOR i=0:1:firstflds { 
       IF $DATA(tflds(i)) {
       WRITE "field ",i," = ",tflds(i),! }
     } }
   ELSE {WRITE "SQLCODE error=",SQLCODE,! }
Run Code Online (Sandbox Code Playgroud)

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

小智 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)
Run Code Online (Sandbox Code Playgroud)

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