尝试查找任何int数组时出错

时间:2016-08-30 06:58:28

标签: arrays postgresql concatenation plpgsql

我目前正在研究 PostgreSQL 中的一个函数,它接受一个整数数组。函数中的所有内容都按预期工作,但是在函数的某一点上,我执行以下操作:

     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.

任何想法如何让任何和整数数组发挥得很好?我假设它与||有关浓缩把它扔成一串?

1 个答案:

答案 0 :(得分: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