2009-05-08 1 views
1

는, 내가 좋아하는 성명을 준비 할 수 있습니다 :"where col in?"태그의 오른쪽에 바인드 컬렉션을 바인드합니다. 오라클 OCI에 절

select * from t where pk in :1 

을하고 대한 VARRAY 모음을 결합 : 1 자리. 나는 다음과 같은 작품 차선책 중 하나를 사용하지 않는

나는, SQLite는에 상응 할 수있는 방법이 표시되지 않습니다 :

  • 는 t에서 *

    선택 준비 할 경우 PK = 1

    대신하고 내 컬렉션의 모든 PKS와이 N 시간을 실행하고 수동으로 N의 행의 "연합"을하는 일은

  • 가 내 컬렉션을 넣어 쿼리 pk를 임시 테이블에 넣고 t로 조인합니다.

  • 텍스트로 바꾸기 : 1을 수집 값으로 바꾸고 준비된 문구의 이점을 무효화하십시오.

나는 뭔가가 부족합니까? 그리고 OCI의 콜렉션 바인딩을 에뮬레이트하기 위해 권장되는 방법은 무엇입니까? 고마워, --DD

+0

오라클에서 생각했던 것처럼 쉽지는 않지만 여전히 가능합니다. 사용할 올바른 Oracle 구문에 대해서는 http://goo.gl/seS4p를 참조하십시오. – ddevienne

답변

3

아아, sqlite은 스칼라에 대한 바인딩 만 지원하므로 매개 변수를 컬렉션에 바인딩 할 수 없습니다. 콜렉터에있는 항목 수가 제한되어 있으면 'IN (?, ?, ?, ?)' [[최대 4 개 항목으로 가정]] 문을 준비한 다음 배열의 실제 스칼라를 바인딩 할 수 있습니다 (4보다 작 으면 마지막 항목을 반복적으로 바인드하거나 당신이 알고있는 값을 플레이스 홀더 (placeholder)로 "불가능"으로 묶습니다. 그렇지 않다면, 당신이 스케치하는 접근법은 사실 마음에 오는 모든 것입니다.

+0

고마워, 이거 생각하지 않았어. 낮은 카디널리티 컬렉션의 경우 가장 쉽고 빠릅니다. 최대 N 개의 자리 표시 자와 함께 하나의 준비된 명령문을 가질 수 있으며, 더 많은 요소가있을 때 예를 들어 다른 하나의 조인을 수행 할 수 있습니다. 건배, --DD – ddevienne