我创建了一个像这样的postgres函数:
CREATE OR REPLACE FUNCTION delete_annotation_f(
IN cmtid uuid)
RETURNS bool AS $$
DECLARE
pid uuid;
cmt_cnt int4;
BEGIN
SELECT get_comment_cnt_f(cmtid) INTO cmt_cnt;
UPDATE detail_t SET ann_cmt_cnt=ann_cmt_cnt - cmt_cnt;
RETURN TRUE;
END
$$
LANGUAGE plpgsql;
但是当我运行此函数时,我收到此错误:
ERROR: column reference "cmt_cnt" is ambiguous
LINE 1: ...detail_t SET ann_cmt_cnt=ann_cmt_cnt-cmt_cnt WH...
我找到了这个链接On Inset: column reference "score" is ambiguous,但它无法帮助我解决问题。有人有解决方案吗?
答案 0 :(得分:1)
您正在使用与列名相同的变量。查询解析器无法决定它必须选择哪个,更改变量名称,然后模糊性将消失。
答案 1 :(得分:1)
https://www.postgresql.org/docs/current/static/plpgsql-implementation.html
默认情况下,如果SQL语句中有名称,PL / pgSQL将报告错误 可以指变量或表列。你可以解决这个问题 通过重命名变量或列,或通过限定 模糊的引用,或通过告诉PL / pgSQL解释 喜欢。 最简单的解决方案是重命名变量或列。普通的 编码规则是为PL / pgSQL使用不同的命名约定 变量比用于列名称的变量。例如,如果你 一致地命名函数变量v_something而不是你的 列名以v_开头,不会发生冲突。
并进一步:
您还可以逐个函数地设置行为 在函数的开头插入这些特殊命令之一 文本:
#variable_conflict error #variable_conflict use_variable #variable_conflict use_column