系统间缓存:嵌入 SQL 始终 returns 仅第一行
Intersystems Cache: Embed SQL always returns only first row
我从关闭复制了代码。文档:
&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,! }
但出于某种原因,它只 returns 第一行的所有字段,没有其他内容。是bug还是我做错了?
您需要使用游标循环遍历 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
Embedded SQL 是对性能敏感的操作的好工具,但如果您需要检索多行,确实很难处理。所有这些游标业务都很痛苦。
考虑改用动态 SQL。它有很好的结果集——就像界面一样。
我从关闭复制了代码。文档:
&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,! }
但出于某种原因,它只 returns 第一行的所有字段,没有其他内容。是bug还是我做错了?
您需要使用游标循环遍历 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
Embedded SQL 是对性能敏感的操作的好工具,但如果您需要检索多行,确实很难处理。所有这些游标业务都很痛苦。
考虑改用动态 SQL。它有很好的结果集——就像界面一样。