Delphi Programming Forum
C++Builder  |  Delphi  |  FireMonkey  |  C/C++  |  Free Pascal  |  Firebird
볼랜드포럼 BorlandForum
 경고! 게시물 작성자의 사전 허락없는 메일주소 추출행위 절대 금지
델파이 포럼
Q & A
FAQ
팁&트릭
강좌/문서
자료실
컴포넌트/라이브러리
FreePascal/Lazarus
볼랜드포럼 홈
헤드라인 뉴스
IT 뉴스
공지사항
자유게시판
해피 브레이크
공동 프로젝트
구인/구직
회원 장터
건의사항
운영진 게시판
회원 메뉴
북마크
델마당
볼랜드포럼 광고 모집

델파이 Q&A
Delphi Programming Q&A
[12106] Re:Where id in ( :p_id )에서 p_id를 ParamByName으로 받을 수 있는 방법은?
박지훈.임프 [cbuilder] 5436 읽음    2008-07-04 11:16
당연히 안됩니다. 쿼리문에 들어가는 파라미터는 단순히 VCL 단에서 문자열 치환을 하는 게 아닙니다.
쿼리문에 들어가는 파라미터는 연결된 데이터베이스 서버가 지원하는, SQL 문법 수준의 기능입니다.

데이터베이스로 파라미터를 가진 SQL을 날리면, SQL문에 파라미터가 들어간 상태로 디비로 날아가는 게 아니라, SQL문과 파라미터 리스트들을 따로 넘깁니다. 그러면 디비 서버가 그걸 받아서 조합하고요.

따라서 파라미터는 SQL문을 하나의 함수라고 볼 때 파라미터는 말 그대로 이 함수에 대한 파라미터라고 할 수 있습니다. 그리고 대부분 자동으로 지정되기는 하지만 SQL문의 파라미터는 함수의 파라미터처럼 특정 타입이 있습니다. 예를 들자면, 델파이로 작성한 함수에 파라미터가 integer 타입 하나인데, 거기에 integer 값 두개를 조합해서 넣을 수는 없는 것과 마찬가지라고 생각하시면 되겠습니다.

디비 서버가 파라미터를 단순히 SQL문에 치환되는 문자열로서 처리하는 것이 아니라 이런 식으로 취급하는 이유는, 디비의 쿼리 엔진이 SQL문을 처리하는 초기 과정과 관계가 있습니다. 여러 SQL문이 들어왔을 때, 서로 다른 파라미터를 가지더라도 원래의 SQL문이 같으면 이전에 실행했을 때 컴파일된 쿼리 플랜으로 계속 재활용할 수 있습니다. 쿼리 플랜이 캐시되는 거죠.

이런 구조의 이론을 더 잘알아보고 싶으시면 parameterized query와 ad-hoc 쿼리, query plan 등의 용어로 검색해보시면 잘 나옵니다. 이 관련 내용들은 데이터베이스의 성능 관리와 아주 밀접한 관계가 있는 내용이고, 일반적으로는 개발자가 아니라 고급 DBA가 알아야 할 지식입니다만, 개발자도 기초 정도는 알아야 전체 업무 시스템의 성능을 올릴 수 있습니다.

그럼...



푸른솔 님이 쓰신 글 :
: 아래와 같은 Query가 있을 때 p_id를 ParamByName으로 받을려고 합니다.
: (실제의 Query는 상당히 복잡합니다. 그래서 반드시 ParamByName으로 받아야 하는데..)
: select ...
: from ...
: where id in ( :p_id );
: ParamByName('p_id').AsString := ??? 이 부분을 어떻게 코딩을 해야 될까요?
:
: 여러가지로 다 해 봤지만 결과가 안 나오네요. 결과가 안 나온다는 얘기는 실행을 시켰을 때 아무 데이타가
: 나오지 않는다는 얘기입니다. 즉, 결과값이 null입니다.
:
: 구글링 등 여러가지로 검색을 해 보았지만 딱히 답을 찾지 못하였습니다.  혹시 아시는 분은 조언을 부탁드리겠습니다.
:
: 참고로 하나는 됩니다. 즉,
: ParamByName('p_id').AsString := 'aaa';  // 이것은 되는데
: 2개 이상이 들어가면 결과값이 안 나옵니다.
: ParamByName('p_id').AsString := '  ''aaa'', ''bbb''   ';  // 이것은 결과가 나오지 않음.
:
: 문법상으로는 전혀 문제가 없을 것으로 보이는데 왜 안되는지 모르겠네요...
: 이외 여러가지로 해 보았지만 정답을 찾지 못하고 질문을 올려 봅니다.
:
: DB는 Sql Server2005 사용합니다.

+ -

관련 글 리스트
12093 Where id in ( :p_id )에서 p_id를 ParamByName으로 받을 수 있는 방법은? 푸른솔 2600 2008/07/02
12106     Re:Where id in ( :p_id )에서 p_id를 ParamByName으로 받을 수 있는 방법은? 박지훈.임프 5436 2008/07/04
12107         Re:Re:Where id in ( :p_id )에서 p_id를 ParamByName으로 받을 수 있는 방법은? 푸른솔 2423 2008/07/04
12099     Re:Where id in ( :p_id )에서 p_id를 ParamByName으로 받을 수 있는 방법은? 곽효근 2583 2008/07/03
12103         Re:Re:Where id in ( :p_id )에서 p_id를 ParamByName으로 받을 수 있는 방법은? 푸른솔 2509 2008/07/04
12094     Re:Where id in ( :p_id )에서 p_id를 ParamByName으로 받을 수 있는 방법은? 멋쟁이 2508 2008/07/02
12095         Re:Re:Where id in ( :p_id )에서 p_id를 ParamByName으로 받을 수 있는 방법은? 푸른솔 2305 2008/07/02
12096             Re:Re:Re:Where id in ( :p_id )에서 p_id를 ParamByName으로 받을 수 있는 방법은? 멋쟁이 2430 2008/07/02
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.