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 ...
代码的文本版本,然后执行它。
我在用 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 ...
代码的文本版本,然后执行它。