Привязать коллекцию как правую часть столбца where в ? пункт

В Oracle OCI я могу подготовить такой оператор:

select * from t where pk in :1

и привяжите коллекцию VArray для заполнителя :1.

Я не вижу способа сделать то же самое в SQLite, если только я не использую один из следующих способов:

  • подготовить

    выберите * из t, где pk=:1

    вместо этого выполните это N раз со всеми pks в моей коллекции и вручную выполните «объединение» строк из N запросов

  • поместите мою коллекцию pk во временную таблицу и выполните соединение с ней с t.

  • текстуально замените :1 значениями коллекции, сводя на нет преимущества подготовленных операторов.

Я что-то упускаю? И какой рекомендуемый способ эмуляции привязки коллекции OCI? Спасибо, --DD


person ddevienne    schedule 08.05.2009    source источник
comment
Что ж, оказалось, что в Oracle это было не так просто, как я думал, но все же возможно. См. goo.gl/seS4p для правильного использования синтаксиса Oracle.   -  person ddevienne    schedule 12.12.2011


Ответы (1)


Увы, sqlite поддерживает привязку только к скалярам, ​​поэтому вы правы, что не можете привязать параметр к коллекции. Если количество элементов в сборщике ограничено, вы можете подготовить оператор с 'IN (?, ?, ?, ?)' [[при условии максимум четырех элементов]], а затем связать фактические скаляры в массиве (если меньше 4, повторно связать последний, или привяжите значение, которое, как вы знаете, «невозможно» в качестве заполнителя); в противном случае подходы, которые вы обрисовываете, действительно более или менее все, что приходит на ум.

person Alex Martelli    schedule 10.05.2009
comment
Спасибо, не подумал об этом. Для коллекций с низкой кардинальностью это может быть самым простым и быстрым. У меня может быть один подготовленный оператор с заполнителями до N, а другой выполняет соединение, например, при наличии большего количества элементов. Привет, --DD - person ddevienne; 11.05.2009