Q&A

  • SQL문 다시 질문입니다...
Last_Num 필드의 최대값을 구하는 부분입니다...


====================================================================
sql.add(' SELECT LAST_DT01,LAST_DT02,LAST_DT03,LAST_DT04,LAST_DT05 FROM YQL02 ');
sql.add(' WHERE MANDT='''+Client+''' ');
sql.add('   AND AUFNR='''+g_Aufnr+''' ');
sql.add('   AND ARBPL Like ''PT%'' ');
sql.add('   AND INSP_CODE= ''6AAB'' ');
sql.add('   AND LAST_RSLT in(''S'',''G'') ');
※ sql.add('   AND Last_Num= (SELECT MAX(Last_Num) FROM YQL02) ');
=====================================================================
위와같이 구현하였더니 컴파일 에러는 없는데 무한루프에 빠집니다...
뭐가 잘못됐는지 모르겠네요... 도와주세요...
3  COMMENTS
  • Profile
    김재현 2003.04.23 20:44
    프로그램이 좀 길어지지만... 아래와 같이 하부조건을 다시
    걸어주니까... 원하는 결과값이 나오더군요...
    내용을 줄이면서 더 좋은 방법이 있으면 리플부탁드립니다...
    도와주신분들 감사합니다...
    그럼 수고하세요...

    sql.add(' SELECT LAST_DT01,LAST_DT02,LAST_DT03,LAST_DT04,LAST_DT05 FROM YQL02 ');
    sql.add(' WHERE MANDT='''+Client+''' ');
    sql.add('   AND AUFNR='''+g_Aufnr+''' ');
    sql.add('   AND ARBPL Like ''PT%'' ');
    sql.add('   AND INSP_CODE= ''6AAB'' ');
    sql.add('   AND LAST_RSLT in(''S'',''G'') ');
    sql.add('   AND Last_Num= (SELECT MAX(Last_Num) FROM YQL02 ');
    sql.add('       Where MANDT='''+Client+''' AND AUFNR='''+g_Aufnr+''' ');
    sql.add('       AND ARBPL Like ''PT%'' AND INSP_CODE= ''6AAB'' ');
    sql.add('       AND LAST_RSLT in(''S'',''G'') )');


  • Profile
    초보껄떡이 2003.04.23 02:55
    이건 확실한 거 아니구여....아래 질문과 답변들을 보고 제가 짐작한건데요
    Query에는 문제가 없어보입니다.
    그 결과를 Fetch하는 과정에서 문법을 잘 모르시는 것 같습니다.
    query를 open하면 첫번째 fetch를 하고 다음건으로 query.next 하면서
    query.eof를 만날때까지 루프를 돌아야 합니다.
    구현하자면....
    with querycomponentname do
    begin
      sql.clear;
      sql.add(....);
      prepare;
      open;
      first;  // -> query.first : 첫번째 레코드 fetch (반대 last : 마지막 레코드)
      while not eof do
      begin
         ..
         next;  //-> 방금 fetch한 다음 레코드로 이동 (반대 prior : 이전레코드 이동)
      end;
      close;
    end;

    이렇게 하면 될것 같은데....무한루프는 next를 빼먹으면 종종 저도 걸리곤 해서....
    짐작으로 답변했습니다. 이게 아니더라도.... 잘 되시길....

  • Profile
    KDDG_ZZOM 2003.04.23 02:50
    YQL02의 PK가 뭔가요?
    서스쿼리에서 조건이 없다보니 그런것같네요...
    LAST_NUM이라는게 테이블전체에서 제일큰거를 잡는건가요?
    그렇다면 테이블 건수가 많아질수록 부하가 걸릴것같네요

    그리고 인덱스튼 타는거겠죠?

    SELECT LAST_DT01,
           LAST_DT02,
           LAST_DT03,
           LAST_DT04,
           LAST_DT05
      FROM YQL02
    WHERE MANDT        =Client
       AND AUFNR        =g_Aufnr
       AND ARBPL     LIKE 'PT%'
       AND INSP_CODE    = '6AAB'
       AND LAST_RSLT   IN('S','G')
       AND Last_Num     =(SELECT MAX(Last_Num)
                            FROM YQL02)