В моем PL/SQL есть этот большой динамический SQL, использующий переменные связывания. Я использую пакет DBMS_SQL для привязки и выполнения сгенерированного запроса.
В зависимости от определенных критериев в динамический SQL добавляются операторы where. Когда я просто использую "in" или "=" для сопоставления моих переменных связывания, все работает нормально, и результаты возвращаются довольно быстро.
Пример:
(servedparty = :bv_ or servedpartyimsi = :bv_)
Однако, когда я делаю следующее:
(servedpartyimei like :bv_)
и укажите значение вроде 12345679890%, запрос занимает очень-очень много времени.
Я также пробовал что-то вроде этого
(servedpartyimei like :bv_||'%')
а затем укажите значение без «%», но это дает те же результаты
Когда я выполняю запрос без переменных связывания, а просто помещаю жестко закодированные значения, результат также возвращается немедленно.
Я делаю что-то не так здесь? Не привязывать переменные, такие как оператор LIKE? Есть идеи?
Спасибо.
servedpartyimei
? Вы показали значение поиска, которое является числом (что имеет смысл для IMEI, я думаю?), но вы обрабатываете его как строку. Возможно, также стоит указать, какую версию Oracle вы используете; а можно посмотреть планы выполнения для быстрой и медленной версий? - person Alex Poole   schedule 17.11.2016