Postgresql存储过程执行错误

时间:2017-03-01 11:46:34

标签: postgresql

我创建了一个存储过程。该功能已成功创建。当我调用函数时,我得到一个错误。我该如何解决这个问题?

错误是

  

错误:无法识别的转换类型说明符“a”   语境:PL / pgSQL函数在EXECUTE语句中的dwgcould.updatescale(整数,整数)第6行   **********错误**********   错误:无法识别的转换类型说明符“a”   SQL状态:22023   上下文:PL / pgSQL函数dwgcould.updatescale(整数,整数)第6行EXECUTE语句

CREATE OR REPLACE FUNCTION scale(IN id integer, IN scale integer) RETURNS integer
AS $$
DECLARE 
    result int;
BEGIN
  IF (SELECT COUNT(*) FROM pg_tables where tablename = format('table_%s_id',id)) > 0 then
    EXECUTE format('update table_%s_id  set geom = ST_Scale(geom, %a, %a',id, scale, scale) using id, scale;
    EXECUTE format('update table_&s_id2  set geom = ST_Scale(geom, %a, %a',id, scale, scale) using id, scale;
    IF FOUND THEN 
        result:= 1;
        return result;
    ELSE 
        result:=0;
        return result;
    END IF; 
  ELSE 
    result:=2;
    return result;
  END IF;
END;
$$ LANGUAGE plpgsql;

1 个答案:

答案 0 :(得分:0)

您混淆了format()中位置参数的使用和EXECUTE命令中的替换变量:

 EXECUTE format('update table_%s_id set geom = ST_Scale(geom, %s, %s)', id, scale, scale);

如果要从`EXECUTE命令返回row_id,则应在UPDATE查询中明确指定:

CREATE OR REPLACE FUNCTION scale(id integer, scale integer) RETURNS integer AS $$
DECLARE 
    result integer;
BEGIN
  IF (SELECT count(*) FROM pg_tables WHERE tablename = format('table_%s_id',id)) > 0 THEN
    EXECUTE format('UPDATE table_%s_id SET geom = ST_Scale(geom, %s, %s)', id, scale, scale) using id, scale;
    EXECUTE format('UPDATE table_&s_id2 SET geom = ST_Scale(geom, %s, %s)
                    RETURNING row_id',id, scale, scale) INTO result;
    RETURN result;
  END IF;
  RETURN 2;
END;
$$ LANGUAGE plpgsql;