2

オフからコードをコピーしました。ドキュメンテーション:

&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,! }

しかし、何らかの理由で、最初の行のすべてのフィールドのみが返され、他には何も返されません。それはバグですか、それとも間違っていますか?

4

2 に答える 2

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を参照してください。

于 2016-07-11T09:52:18.790 に答える
1

埋め込み SQL は、パフォーマンスに優れたツールです。機密性の高い操作ですが、複数の行を取得する必要がある場合は扱いが困難です。このカーソルビジネスはすべて苦痛です。

代わりに動的 SQL の使用を検討してください。インターフェイスのような素晴らしい結果セットがあります。

于 2016-07-12T12:18:43.663 に答える