Q&A

  • 오라클 쿼리 질문입니다
쿼리는
SELECT_DATA = 'select  a-b, a-c  from aaa               '
              + 'where name in(:indats)                      ';

그리고 파라메터는
특정변수에서 받아서 넣어줍니다

inddd의 스트링변수에 다른 쿼리에서 구한값이 넣어져 있구요
이것을
parambyname('indats').asstring := inddd; 이렇습니다

그런데 문제는 inddd변수에 '홍길동' 이렇게 하나만 넣으면 나오는데
inddd := '홍길동','홍길순'; 이렇게 하나이상이면 안나오네요...

에러가 'END' expected but ',' found인데 아무래도 저런 식은 안되나보네요
어떻게 처리해야 하나요?

그리드는 리얼그리드 입니다
4  COMMENTS
  • Profile
    아폴론 2005.03.30 00:34


    inddd := '홍길동';
    inddd := inddd+''',''홍길순';
    inddd := inddd+''',''이순신';
  • Profile
    nilriri™ 2005.03.19 03:05
    파라미터에 넘겨주신 대로라면..

    오라클에 최종적으로 넘겨지는 쿼리 문장은

    한건일때        select  a-b, a-c  from aaa   where name in (''홍길동''); 이 되지만
    한건이상일때  select  a-b, a-c  from aaa   where name in (''홍길동','홍길순''); 이 되어서 에러가 발생하는겁니다.


    억지스럽지만
    SELECT_DATA = 'select  a-b, a-c  from aaa               '
                           + 'where name in(:indat1,:indat2,.....,:indatn)                      ';


    parambyname('indat1').asstring := indd1;
                :
                :

    이런식이 되어야 합니다..


    그래서 이것보다는..

    SELECT_DATA = 'select  a-b, a-c  from aaa               '
                           + 'where name in('
                           + inddd  // <- 얘는 '홍길동','홍길순',....'아무개'  형식일때..^^;
                            +')                      ';

    이렇게 sql문장을 직접 조합하시면 됩니다.

    그리고 in 절에 넘기는 갯수는 dbms별로 제한사항이 있는걸로 알고 있습니다 확인해 보시구요..^^;


    그것보다는 inddd 를 데이터베이스에서 쿼리해 오는거라면 subquery로 작성하셔서
    stored procedure로 사용하시면 될거 같은데요..

    그럼..

  • Profile
    2005.03.19 03:22
    우선 답변 대단히 감사합니다
    그런데 제가처한 상황이 좀.....

    원격의 두 서버에 서로다른 db이거든요-오라클+인포믹스
    인포믹스에 있는 자료와 오라클에 있는 자료를 비교해서

    두 db의 공통자료를 그리드에 뿌려주는 것 입니다
    그래서 조인이나 서브쿼리가 좀 힘든 상황 이구요..ㅜㅜ

    공통자료는 한 하루에 300-400건정도 되구요..
    좋은방법 없을까요?




  • Profile
    무심코 2005.03.19 02:59


    name in ('홍길동','홍길순',.....) 이렇게 되어야 하는데....
    님이 하신대로 하면
    name in ('홍길동''홍길순'...) 이렇게 될것같네요
    inddd := '홍길동'+','+'홍길순'+','+....이런식으로 하면 될거라고 보여지네요!