2016-08-30 1 views
1

В настоящее время я работаю над функцией в PostgreSQL, где он принимает массив целых чисел. Все в функции работает как и ожидалось, однако в какой-то момент в функции я следующее:Ошибка при попытке найти ЛЮБОЙ из массива int

 EXECUTE 
    'INSERT INTO tmptable (user_id) 
     SELECT DISTINCT user_id FROM user_skills 
     WHERE skill_values_id=ANY('||selected_skills||')'; 

Моя функция может читать массив в других точках в коде, однако эта часть выдает следующее сообщение об ошибке :

выполнение процедуры не удалось

ERROR: malformed array literal: " 
    INSERT INTO tmptable (user_id) 
    SELECT DISTINCT user_id FROM user_skills 
      WHERE skill_values_id=ANY(" 

И финально есть строка в нижней части сообщения об ошибке, которое говорит:

DETAIL: Array value must start with "{" or dimension information. 

Любые идеи о том, как заставить любой и целочисленный массив играть хорошо? Я предполагаю, что это имеет какое-то отношение к || концентрация литья его в строку?

ответ

3

Не конкатенации значения, параметры использовать вместо:

EXECUTE 
'INSERT INTO tmptable (user_id) 
    SELECT DISTINCT user_id FROM user_skills 
    WHERE skill_values_id=ANY($1)' 
using selected_skills; 

более подробно в руководстве:

https://www.postgresql.org/docs/current/static/plpgsql-statements.html#PLPGSQL-STATEMENTS-EXECUTING-DYN

+0

Высокий - я пытался это раньше, и ушел из с помощью selected_skills; – jpegasus

Смежные вопросы