Nano Hash - криптовалюты, майнинг, программирование

Oracle - использование переменной связывания в предложении LIKE динамического курсора

Я использую динамический курсор для получения данных. Выполняемый запрос выглядит примерно так:

query := 'SELECT column1, column2 
          FROM my_table 
          WHERE column1 LIKE ''%:bv1%''';

А сам курсор выполняется так:

OPEN my_cursor FOR query USING my_var1;

Я также попытался проверить запрос и распечатать его:

... WHERE column1 LIKE '%:bv1%' ...

поэтому апострофы экранируются, но курсор не извлекает данные. Можно ли вообще использовать переменные связывания в предложении LIKE, и если да, то что я сделал не так?


Ответы:


1

Это тонкий. Часто бывает полезно начать со статического оператора, сделать это правильно, а затем преобразовать его в динамический SQL.

В нединамическом SQL мы могли бы сделать это так:

 SELECT column1, column2 
 FROM my_table 
 WHERE column1 LIKE '%' || local_var || '%'; 

Динамический эквивалент

query := 'SELECT column1, column2 
          FROM my_table 
          WHERE column1 LIKE ''%''||:bv1||''%'' ';
22.05.2017
  • Спасибо, теперь работает. Я сделал это именно так, как вы сказали - переходя от статического оператора к динамическому, я просто понятия не имел, что мне все еще нужно использовать операторы || в динамическом запросе. 22.05.2017

  • 2

    Выньте переменную связывания из строки:

    VARIABLE mycursor REFCURSOR;
    VARIABLE bv1 VARCHAR2;
    
    BEGIN
      :bv1 := 'X'; -- set the bind variable
    END;
    /
    
    DECLARE
      query VARCHAR2(200) := 'SELECT * FROM DUAL WHERE DUMMY LIKE :value';
    BEGIN
      OPEN :mycursor FOR query USING '%' || :bv1 || '%';
    END;
    /
    
    PRINT mycursor;
    

    Вывод

    MYCURSOR
    --------
    DUMMY
    -----
    X
    
    22.05.2017
  • Теперь я получаю PLS-00049: bad bind variable 'LV_CTYPE' 22.05.2017
  • @PeterGubik Обновлено 22.05.2017
  • Это, вероятно, также сработает, но приведенное выше решение более полезно для моих нужд. Спасибо, в любом случае :) 22.05.2017
  • Спасибо, использовал это, и по какой-то причине мое очень ограниченное тестирование показало, что это решение работает немного лучше, чем принятый ответ. 07.06.2019
  • Новые материалы

    Кластеризация: более глубокий взгляд
    Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

    Как написать эффективное резюме
    Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

    Как я автоматизирую тестирование с помощью Jest
    Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

    Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
    В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..