Postgresql:[42883]错误:运算符不存在:text | | integer[]

Postgresql:[42883]错误:运算符不存在:text | | integer[],postgresql,Postgresql,我收到如下错误:[42883]错误:运算符不存在:text | | integer[]提示:没有与给定名称和参数类型匹配的运算符。您可能需要添加显式类型转换。我无法解决这个问题,尝试了很多次 我的代码: DECLARE arr_operators integer[1,2]; BEGIN query1 := 'SELECT * FROM dist.' || _rec1.table_name || ' WHERE operator_id = ANY (''' || arr_opera

我收到如下错误:[42883]错误:运算符不存在:text | | 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;
我认为当我生成查询字符串时,问题就出现了。但当我直接在查询中使用此语句时,下面的语句运行良好:

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
如果表名是:
;删除数据库--

它可以改写为:

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

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

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


这一部分特别危险:

query1 := 'SELECT * FROM dist.' || _rec1.table_name
如果表名是:
;删除数据库--

它可以改写为:

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

将其转换为文本:
query1:=“SELECT*FROM dist.”| | | | | u rec1.table | | | |”其中运算符| id=ANY(“”“| | arr| u运算符::text | |“)
但是操作符\u id和arr\u操作符是整数,它能工作吗?是的,它工作得很好,强制转换只用于创建查询字符串,您将得到
…=执行查询时应隐式转换为整数数组的任何({1,2,3}')
。好的,谢谢兄弟的帮助。它正在将其转换为文本:
query1:=“SELECT*FROM dist.”| | | | | rec1.table|u name | |”其中运算符| id=ANY(“'| | arr| u运算符::text | |')
但是操作符\u id和arr\u操作符是整数,它能工作吗?是的,它工作得很好,强制转换只用于创建查询字符串,您将得到
…=执行查询时应隐式转换为整数数组的任何({1,2,3}')
。好的,谢谢兄弟的帮助。它正在工作,但表名称应为changed@AbdusoliErgashev
格式('%I')
正在执行此操作,但表名称应为changed@AbdusoliErgashev
FORMAT(“%I”)
正在执行此操作