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



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

我的代码:

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;

我认为当我是 makin 查询字符串时出现问题。但是当我在查询中直接使用此语句时,下面的 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;

任何帮助,不胜感激。

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

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

数据库<>小提琴演示


这部分特别危险:

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

如果表名是:;DROP DATABASE ...;--

它可以重写为:

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

最新更新