我创建了一个动态函数。我动态地获得了表名的一部分。该功能已成功创建。但是当我执行该功能时。我收到一个错误。我怎么解决这个问题?我用
调用函数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)|| '_线... ^ 提示:没有函数匹配给定的名称和参数类型。您可能需要添加显式类型转换。 QUERY:选择'SELECT st_x(st_centroid(st_transform(geom,4326)))作为lng_center,st_y(st_centroid(st_transform(geom,4326)))作为lat_center 来自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语句
另外,我如何检查表格是否存在?
答案 0 :(得分: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;