我正在尝试编写一个函数,该函数将使用存储在同一个表的多个列之一中的值来更新列。馈送列表示通常不完整的分类层次结构,因此我希望接收列存储最低的可用值。这是我最接近的,我觉得我还很远:)。
CREATE OR REPLACE FUNCTION get_taxon()
RETURNS void LANGUAGE plpgsql AS
$BODY$
BEGIN
IF taxon.subespecie is not null THEN
UPDATE taxon SET taxon = subespecie FROM taxon;
ELSIF taxon.especie is not null THEN
UPDATE taxon SET taxon = especie;
ELSIF taxon.genero is not null THEN
UPDATE taxon SET taxon = genero;
ELSIF taxon.subfamilia is not null THEN
UPDATE taxon SET taxon = subfamilia;
ELSIF taxon.familia is not null THEN
UPDATE taxon SET taxon = familia;
ELSIF taxon.infraordem is not null THEN
UPDATE taxon SET taxon = infraordem;
ELSIF taxon.subordem is not null THEN
UPDATE taxon SET taxon = subordem;
END IF;
END;
$BODY$
当我调用该函数时,我收到此错误:
错误:表“taxon”缺少FROM子句条目第1行:SELECT taxon.subespecie不为空
来自这里的公寓我也有一个普遍的疑问:应该为这样的函数声明什么样的RETURN
,更新现有的字段?
答案 0 :(得分:1)
对于此问题,您应该使用内置的coalesce()
函数:
UPDATE taxon SET taxon = coalesce(subespecie, especie, genero, subfamilia, familia,
infraordem, subordem)
WHERE taxon IS NULL;
coalesce()
函数接受任意数量的参数,然后返回第一个非空值。