안녕하세요.
프로젝트를 진행하다, 쿼리를 날리는 부분에서 어떻게 작성해야할지
난감한 부분이 있어서 이렇게 질문드리게 됐습니다.
예전부터 바인드 변수를 쓰는 것이 더낫다는 말을 듣고 쿼리나
프로그램도 그렇게 작성하고 있습니다.
그런데 다음과 같은 경우에 어떻게 써야할지 난감하더군요.
예를 들어, 어떤 게시판 리스트에서 사용자가 게시물을 check box로
선택하여 시퀀스 값을 넘깁니다.
이는 하나가 될 수도 있고 여러개의 값이 될 수 있습니다.
해당 시퀀스 리스트를 받아서 해당 테이블에 SELECT, UPDATE, DELETE
를 수행해야한다고 했을 때,
SELECT REG_NO, WRITER, POINT FROM TABLE_NAME WHERE REQ_NO IN
(1,2,3,4,5);
UPDATE TABLE_NAME SET POINT=POINT+10 WHERE REQ_NO IN (8);
DELETE FROM TABLE_NAME WHERE REQ_NO IN (3,6,8,11);
예를 들었지만 위와 같이 처리하게 됩니다. (각각의 시퀀스 값은
신경쓰지 마세요. 그냥 예를 든것입니다. 어떤 규칙도 없습니다.
사용자가 임의로 선택한 값일 뿐입니다.)
이를 바인드로 처리하기 위해선 각각의 쿼리를 Application 상에서
루프를 돌아야 가능합니다.
for (i=0; i<cnt; ++i)
{
query = "SELECT REG_NO, WRITER, POINT FROM TABLE_NAME WHERE
REQ_NO = :NO";
setBindValue(":NO") = check[i];
rs[] = stmt->exec(query);
// 처리.
}
위와 같이 말이죠.
결론적으로 제가 궁금한 것은,
1. 여러개의 값을 바인드를 처리하지 않고 IN 을 써서 한번에 쿼리를
날리는 것이 DB Server의 부하가 적을지,
2. 바인드 처리를 한 후, 여러번 쿼리를 날리는 것이 나을지에 대한
것입니다.
그럼 고수님들의 현명한 답변 부탁드립니다.
검색도 해보고, 여러 서적을 찾아보았으나 명확한 답변을 얻지
못하여서 이렇게 질문드립니다.
-----------------------------------------------------------
DB : Oracle 8.1.7
빈번도 : 약 1초당 한건씩 호출됩니다. (SELECT)
그 외 UPDATE, DELETE 문은 약 1 분당 한 건 씩
호출됩니다.
-----------------------------------------------------------
|