postgresql不能在用户定义的函数中使用串联变量

问题描述 投票:0回答:1

创建功能以从视图中提取数据,其名称前缀作为函数参数传递:

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语句

注意,该输出没有更改。 相同的错误持续存在,如果进一步发展功能,它必须从临时表中返回某些内容(分别更改了返回)。

string variables user-defined-functions psql
1个回答
0
投票
你可以尝试一下吗?

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;


最新问题
© www.soinside.com 2019 - 2025. All rights reserved.