[英]Error “relation does not exist” in PostgreSQL function()
函數定義:
CREATE OR REPLACE FUNCTION len_chars(t_name VARCHAR, f_name VARCHAR) RETURNS BIGINT AS $$
BEGIN
SELECT sum(char_length(f_name)) FROM t_name;
END;
$$ LANGUAGE plpgsql;
從psql調用
SELECT len_chars('public.tag', 'name');
表“標簽”和列“名稱”的返回錯誤:
psql: ERROR: relation "t_name" does not exist
LINE 1: SELECT sum(char_length(f_name)) FROM t_name
^
QUERY: SELECT sum(char_length(f_name)) FROM t_name
CONTEXT: PL/pgSQL function len_chars(character varying,character varying) line 1 at SQL statement
可以在postgresql函數中選擇表名嗎?
為此,您需要動態SQL。 為了安全地構造動態SQL字符串,最好的方法是使用%I
占位符使用format()
函數,以便在需要時正確處理引號標識符。
CREATE OR REPLACE FUNCTION len_chars(t_name VARCHAR, f_name VARCHAR)
RETURNS BIGINT AS $$
declare
l_result bigint;
BEGIN
execute format('SELECT sum(char_length(%I)) FROM %I', f_name, t_name)
into l_result;
return l_result;
END;
$$ LANGUAGE plpgsql;
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.