Russian Qt Forum
Август 17, 2018, 13:08 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: Postgres параметры SELECT запроса списком.  (Прочитано 159 раз)
RedDog
Новичок

Offline Offline

Сообщений: 33


Просмотр профиля
« : Август 07, 2018, 19:56 »

Господа, как правильно в SELECT запрос передать список значений для фильтрации?

Вот такой код пишет, что ему мало параметров

    
Код
C++ (Qt)
QVariantList keys
   {
   QUuid("08a34f7d-7c20-4c58-a034-fba625ee11eb"),
   QUuid("96f86679-9b77-456d-8204-644e6f500d4c"),
   QUuid("a98c85b0-80b5-4a32-bb1f-7c3a7196cae8")
   };
 
   const QString sqlText = R"(SELECT * FROM "TestTable" WHERE "Id" IN(?);)";
 
   QSqlQuery select(m_database);
 
   select.prepare(sqlText);
   select.addBindValue(keys);
 
   if (!select.exec())
       qDebug() << select.lastError().text();

Цитировать
"ОШИБКА:  неверное число параметров для подготовленного оператора \"qpsqlpstmt_1\"\nПОДРОБНОСТИ:  Ожидалось параметров: 1, получено: 0.

попробовал вот через преобразования в текст делать типа такого:
Код:
SELECT * FROM "TestTable" WHERE "Id"::text IN(?);
тоже не работает.

В чем моя ошибка?

PS: запросы на вставку/удаление/обновление с переданными списками execBatch() работают.


Решение:

Код
SQL
SELECT * FROM "TestTable" WHERE "Id" IN(SELECT unnest(string_to_array(?, ','))::uuid);
Ключи преобразовать в строку с разделителем запятой, и эту строку передать как параметр в запрос.
« Последнее редактирование: Август 10, 2018, 19:33 от RedDog » Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  

Страница сгенерирована за 0.083 секунд. Запросов: 22.