这里的功能是:
CREATE OR REPLACE FUNCTION get_img(ptype text, pid integer, pdpi integer)
RETURNS bytea AS
$BODY$
declare psize char(1); pimg bytea;
begin
select size into psize from dpi_size where dpi in(select max(dpi) from dpi_size where dpi <= pdpi);
select coalesce(psize, 's') into psize;
if ptype = 'cat' then
execute 'select img_' || psize || ' into pimg from cat where id = $1' using pid;
end if;
return pimg;
end; $BODY$
LANGUAGE plpgsql VOLATILE
COST 100;
ALTER FUNCTION get_img(text, integer, integer)
OWNER TO postgres;
表cat有img_s,img_m,img_l和id。这是我运行select时得到的结果。
select handyman_get_img ('cat', 11, 320)
错误:关系&#34; pimg&#34;已存在语境:SQL语句&#34;选择 img_l来自cat的pimg,其中id = $ 1&#34; PL / pgSQL函数 EXECUTE语句中的get_img(text,integer,integer)第8行
任何人都可以告诉我为什么它说&#39; pimg&#39;已经存在?
感谢。
答案 0 :(得分:1)
您不能在execute
的字符串文字中使用变量。
传递给execute
的字符串运行&#34;按原样#34;和select .. into pimg from ...
an old (non-standard) syntax的作用与create table pimg as select ...
相同。
如果要将execute
的结果存储到变量中,则需要使用不同的语法:
execute 'select img_' || psize || ' from cat where id = $1'
into pimg
using pid;
注意into
如何在正在执行的字符串之外。