PostgreSQL:[42883]错误:运算符不存在:文本||整数[]

时间:2019-12-22 09:49:32

标签: postgresql

我收到如下错误:[42883]错误:运算符不存在:文本|| integer []提示:没有运算符匹配给定的名称和参数类型。您可能需要添加显式类型转换。我无法解决此问题,并尝试了很多次。

我的代码:

DECLARE

arr_operators       integer[1,2];

BEGIN
query1 := 'SELECT * FROM dist.' || _rec1.table_name || ' WHERE operator_id = ANY (''' || arr_operators || ''');';

FOR _rec IN EXECUTE query1 LOOP

END LOOP;

我认为当我使用查询字符串时会发生问题。但是当我在查询中直接使用此语句时,下面的lik效果很好:

FOR _rec1 IN (SELECT * FROM dist.sirdarya WHERE id = any (arr_operators)) LOOP

         INSERT INTO dist.justt(column1,column2) VALUES (_rec1.id,_rec1.msisdn);

END LOOP;

感谢您的帮助。

1 个答案:

答案 0 :(得分:2)

我建议取消嵌套数组而不是连接字符串,这可能导致SQL注入:

SELECT * 
FROM table_name
WHERE operator_id IN (SELECT * FROM unnest(arr_operators));

db<>fiddle demo


这部分特别危险:

query1 := 'SELECT * FROM dist.' || _rec1.table_name

如果表名称为;DROP DATABASE ...;--,该怎么办?

它可以改写为:

query1 := FORMAT('SELECT * FROM dist.%I ...', _rec1.table_name);
相关问题