내 PL/SQL에서 바인드 변수를 사용하여이 큰 동적 SQL을 사용하십시오. DBMS_SQL 패키지를 사용하여 생성 된 쿼리를 바인드하고 실행합니다.LIKE % 연산자를 사용하여 바인드 변수를 사용하십시오.
특정 기준에 따라 where 절이 동적 SQL에 추가됩니다. 방금 ""또는 "="를 사용하여 바인드 변수를 모두 일치 시키면 모두 잘 작동하고 결과가 매우 빨리 반환됩니다.
예 : 내가 할 때
그러나(servedparty = :bv_ or servedpartyimsi = :bv_)
, 다음
(servedpartyimei like :bv_)
및 쿼리가 매우 매우 매우 긴 시간이 소요 1백23억4천5백67만9천8백90퍼센트 같은 값을 제공합니다.
나는 또한 '%'없이 값을 제공하지만 바인딩 변수없이 쿼리를 실행할 때이 같은 결과 을 제공합니다 다음이(servedpartyimei like :bv_||'%')
과 같은 somehting을 시도했지만 하드 코드 된 값을 넣으면 결과가 즉시 반환됩니다.
여기 뭔가 잘못 되었나요? LIKE 연산자와 같은 변수를 바인드하지 않습니까? 아이디어가 있으십니까?
감사합니다.
'servepartyimei'는 어떤 데이터 유형입니까?검색 값을 숫자로 표시했습니다 (IMEI가 맞는 것 같습니까?)하지만 문자열로 취급하고 있습니다. 또한 사용중인 Oracle 버전을 알려줄 필요가 있습니다. 빠르고 느린 버전의 실행 계획을 살펴볼 수 있습니까? –
imei는 데이터베이스에 문자열로 저장됩니다. 데이터베이스 버전은 11.2 – Tijs
입니다. 실행 계획을보고 싶다면 여전히 실행 계획을 살펴볼 필요가 있습니다. 아마도 다른 것으로 생각되는 (색인 된) 열에도 필터가 있거나 다른 이유로 예상되는 인덱스를 사용하지 않는 것일 수 있습니다. 우리는 그것이 무엇을하고 있는지 실제로 추측 할 수 없습니다. 알아 내야합니다. –