0
這裏的功能:爲什麼我在這個執行語句中已經存在關係?
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;
表貓有img_s,img_m,IMG_L和ID。這是我運行select時得到的結果。
select handyman_get_img ('cat', 11, 320)
ERROR: relation "pimg" already exists CONTEXT: SQL statement "select img_l into pimg from cat where id = $1" PL/pgSQL function get_img(text,integer,integer) line 8 at EXECUTE statement
誰能賜教爲什麼它說 'PIMG' 已存在?
謝謝。
謝謝。您的格式有效。但是,如果select into創建一個臨時表,那麼當我不使用'execute'語句時,如何'已經存在'錯誤不會出現,並且只需將select img_l寫入pimg中...? – black 2014-09-24 11:09:24
@Sebouh:因爲第一個'select'不是一個字符串文字,而是一個由PL/pgSQL引擎執行的「嵌入式」選擇 - 它理解'into'用於變量而不是新表格。 – 2014-09-24 11:13:05
有意義。感謝您的解釋。 – black 2014-09-24 11:14:14