创建功能以从视图中提取数据,其名称前缀作为函数参数传递:
CREATE FUNCTION t (char(2)) RETURNS text AS $$
DECLARE view_name TEXT;
BEGIN
view_name := CONCAT($1, '_any_text');
RETURN view_name;
END;
$$ LANGUAGE plpgsql;
工作如预期的,返回文本字符串'prefix_any_text',直到我添加一些文本到功能主体:
CREATE FUNCTION t (char(2)) RETURNS text AS $$
DECLARE view_name TEXT;
BEGIN
view_name := CONCAT($1, '_any_text');
CREATE TEMP TABLE t1 AS
SELECT any_column FROM view_name;
RETURN view_name;
END;
$$ LANGUAGE plpgsql;
试图执行创建(替换)时,我得到:
SQL错误[42P01]:错误:关系“ view_name”不存在
地点:pl/pgsql函数t(字符)行#在sql语句
CREATE FUNCTION t (char(2)) RETURNS text AS $$
DECLARE
view_name TEXT;
sql_query TEXT;
BEGIN
view_name := CONCAT($1, '_any_text'); -- Constructing the view name dynamically
-- Construct the dynamic SQL query
sql_query := FORMAT('CREATE TEMP TABLE t1 AS SELECT any_column FROM %I', view_name);
-- Execute the dynamic query
EXECUTE sql_query;
RETURN view_name;
END;
$$ LANGUAGE plpgsql;