PostgreSQL - 过程中不是已知变量

PostgreSQL - not a known variable in procedure

我在用 PostgreSQL 编写过程时遇到了问题。我可以创建程序,但是当我尝试执行时,我得到一个 error.The 错误,我得到

ERROR: "v_all_atts" is not a known variable 

查询是:

CREATE OR REPLACE FUNCTION rebuild_views_with_extra_atts()
RETURNS VOID AS $$
DECLARE
v_all_atts varchar(4000);

BEGIN
CREATE OR REPLACE FUNCTION add_column(p_table text, p_column text,p_category text) RETURNS VOID AS $nothing$
declare
  v_column_exists bigint := false ;
 BEGIN
 SELECT
 string_agg( CASE WHEN owner='alarm' THEN 'ai'  WHEN owner='fault' THEN 'fi' 
        END ||'.'||lower(alias) , ', '   ORDER BY owner, alias) AS string
 INTO STRICT
   v_all_atts
 FROM
   extra_attribute_cfg
 WHERE
   owner NOT LIKE 'virtual' and enable = true and v_column_exists = true;
 IF LENGTH(v_all_atts) is not null THEN
   v_all_atts := ', '||v_all_atts;
 END IF;

 v_view:= q'#
  CREATE OR REPLACE VIEW alarm_view AS
    SELECT
      fi.fault_id, ai.alarm_id, 

      #'||v_all_atts||q'#

    FROM
     alarm ai
      INNER JOIN fault fi
          ON fi.fault_id = ai.fault_id
#';
EXECUTE v_view;
END;
$nothing$ language plpgsql;

end;
$$ LANGUAGE plpgsql;

我仔细查看了 Postgres 文档,但找不到问题所在,也没有找到针对这种特定情况的任何答案

您的 rebuild_views_with_extra_atts() 函数正在创建 add_column() 函数。

add_column() 使用了 v_all_atts 变量,但它不存在于该函数中,它仅存在于 rebuild_views_with_extra_atts() 函数中。

要解决这个问题,这实际上取决于您要做什么。如果该变量应该存在于 add_column() 函数中,那么就在那里声明它。如果您在创建 add_column() 时尝试使用 v_all_atts 的值(例如,函数体的内容取决于该变量的值),那么您确实需要使用动态 sql 生成 CREATE OR REPLACE ... 代码的文本版本,然后执行它。