2016-07-11 6 views
2

코드를 복사하지 않았습니다. 문서 :Intersystems 캐시 : 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,! } 

그러나 어떤 이유로 첫 번째 행의 모든 ​​입력란 만 반환합니다. 그것은 버그입니까, 아니면 잘못하고 있습니까?

답변

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) 

+0

감사합니다. 이 문서는 어떤 이유로 든 읽기가 어렵습니다. 매우 혼란스럽고 때로는 명확하지 않습니다. –

1

임베디드 SQL 성능을위한 좋은 도구입니다 대한 추가 정보를 원하시면 http://docs.intersystems.com/latest/csp/docbook/DocBook.UI.Page.cls?KEY=GSQL_esql#GSQL_esql_cursor를 참조 - 민감한 작업을하지만, 실제로 하드 두 개 이상의 행을 검색해야하는 경우를 처리 할 수 ​​있습니다. 이 모든 커서 비즈니스는 고통입니다.

대신 동적 SQL을 사용해보십시오. 그것은 좋은 결과 - 같은 인터페이스가 있습니다.

관련 문제