SQL 错误 [42601] : Error: syntax error at or near "0"

标签 sql postgresql plpgsql dblink

我不明白我是如何从 select 中创建一个数组的,我有一个错误

SQL Error[42601]: Error: syntax error at or near "0"", Error occurred on dblink connection named "unnamed": could not execute query.

create temporary table house_address as
   (SELECT full_address
    FROM dblink('db_d',
         'drop table if exists _x17092018;
             create temporary table _x17092018 (
             guid character varying,
             full_address character varying,
             address_guid character varying
          ); 
          do $$
             declare
                guids_list character varying[]
                   := ''{(''' ||
                      (SELECT STRING_AGG(DISTINCT guid, ''', ''')
                       FROM lc) ||
                      ''')}'';
                r character varying;
             begin
                foreach r in array guids_list 
                loop
                   insert into _x17092018
                      select r, t.*
                      FROM sm.func_by_houseid(r, TRUE, ''db'') as t;
                end loop;
             END$$;'
         ) AS addr(full_address TEXT)
   );

最佳答案

错误必须来自guids_list的初始化。

按照它的写法,它会像这样出现

{[guid1', 'guid ' containing spaces and quote', 'guid3]}

这显然不是您想要的。此外,正如我试图演示的那样,它对 SQL 注入(inject)是开放的。

你可以使用类似的东西

'guids_list character varying[] := ' ||
   (SELECT quote_literal(array_agg(DISTINCT guid)) FROM lc) || ';'

关于SQL 错误 [42601] : Error: syntax error at or near "0",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52379591/

相关文章:

java - 如何在 netbeans 中查看 mysql 查询的结果

sql - 如何使用PostGIS缓冲点图层并查找点是否落在这些缓冲区内,忽略每个缓冲区自己的中心点

mysql - 如何在 MySQL 中返回数据透视表输出?

python - 如何为具有不同列的多个表编写单个查询,从而使用 python-django 创建rest api

PHP:检查 postgres 连接是否存在?

sql - PL/pgSQL 触发器阻止一条河流穿越另一条河流

sql - ";"处或附近的 plpgsql 语法错误

sql - Bash 脚本和 PostgreSQL : How to access column values returned from SELECT statement

sql - 如何插入一行并附加行号以强制执行唯一性?

function - 从 plpgsql 函数返回多行