首页 文章

Postgresql函数动态表quote_ident错误

提问于
浏览
0

我创建了一个动态函数 . 我动态地获得了表名的一部分 . 该功能已成功创建 . 但是当我执行该功能时 . 我收到一个错误 . 我怎么解决这个问题?我用这个函数调用

select * from dwgcould.getlatlngcenter(2000653);


CREATE OR REPLACE FUNCTION dwgcould.getlatlngcenter(IN pro_id integer,
    OUT lat_center double precision, OUT lng_center double precision)
AS $$

BEGIN
      EXECUTE 'SELECT st_x(st_centroid( st_transform(geom,4326))) as lng_center  ,st_y(st_centroid( st_transform(geom,4326))) as lat_center
        FROM dwgcould.adpes_v1_' || quote_ident(pro_id) || '_line limit 1';
END;
$$ LANGUAGE plpgsql;

错误代码是

错误:函数quote_ident(整数)不存在第2行:FROM dwgcould.adpes_v1_'|| quote_ident(pro_id)|| 'line ... ^提示:没有函数匹配给定的名称和参数类型 . 您可能需要添加显式类型转换 . QUERY:选择'SELECT st_x(st_centroid(st_transform(geom,4326)))为lng_center,st_y(st_centroid(st_transform(geom,4326)))为lat_center FROM dwgcould.adpes_v1'|| quote_ident(pro_id)|| '_line limit 1'语境:PL / pgSQL函数dwgcould.getlatlngcenter(整数)第4行EXECUTE语句******错误******错误:函数quote_ident(整数)不存在SQL状态:42883提示:没有函数匹配给定的名称和参数类型 . 您可能需要添加显式类型转换 . 上下文:PL / pgSQL函数dwgcould.getlatlngcenter(整数)第4行EXECUTE语句

另外我如何检查表是否存在?

1 回答

  • 0

    更好地使用格式,例如:

    CREATE OR REPLACE FUNCTION dwgcould.getlatlngcenter(IN pro_id integer,
        OUT lat_center double precision, OUT lng_center double precision)
    AS $$
    
    BEGIN
      if (select count(1) from pg_tables where tablename = format('adpes_v1_%s_line',pro_id)) < 1 then
        raise info '%','NO SUCH TABLE!';
        return;
      end if;
      EXECUTE format('SELECT * FROM dwgcould.adpes_v1_%s_line limit 1',pro_id) into lat_center,lng_center;
      return;
    END;
    $$ LANGUAGE plpgsql;
    

    docs

相关问题