2016-02-25 84 views
1

我正在嘗試編寫一個函數,它將使用存儲在同一個表的多個列中的一列中的值更新列。飼養欄表示通常不完整的分類學層次結構,因此我希望接收欄存儲最低的可用值。這是我得到的最接近的,我感覺我仍然很遠:)。PostgreSQL - 使用同一表中其他列的值更新一列

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$ 

當我打電話的功能我得到這個錯誤:

ERROR: missing FROM-clause entry for table "taxon" LINE 1: SELECT taxon.subespecie is not null

Appart酒店從這個我也有一般的疑問:應被宣佈爲這樣的功能是什麼樣的RETURN,現有的更新字段?

回答

1

對於這個問題,你應該使用內置的coalesce()功能:

UPDATE taxon SET taxon = coalesce(subespecie, especie, genero, subfamilia, familia, 
            infraordem, subordem) 
WHERE taxon IS NULL; 

coalesce()函數接受的參數的任意數,然後返回第一個非空值。

+0

謝謝帕特里克 - 這正是我需要的!我現在可以將其包裝爲觸發函數。 – Lisdengard

相關問題