2014-10-06 60 views
0

我想有一個PostgreSQL擴展函數,它可以首先檢查表中是否有一行face_area(face int,area float),如果沒有,則計算並插入表中。返回應該是area(float),輸入應該是face(int)。我在下面寫了一個函數,但結果只能是float,我該如何修改函數讓返回的結果只是一個浮點數?我該如何修改這個pl/pgsql函數?

CREATE FUNCTION get_area (face integer) RETURNS setof float AS $$ 
BEGIN 
RETURN query SELECT area FROM face_area WHERE face_area.face=$1; 
IF NOT FOUND THEN 
    INSERT INTO face_area VALUES ($1,calc_area($1)); 
END IF;   
END; 
$$ LANGUAGE plpgsql; 

select get_area(1); 
select * from face_area; 
+0

你能澄清WHERE子句嗎?你將face_area描述爲(id int,area float),但使用列「face」...? – 2014-10-06 14:58:15

+0

@AndrewWolfe我修改了它。 – user3419945 2014-10-06 14:59:51

+0

另外,爲什麼SETOF浮動?爲什麼你需要返回查詢結果? – 2014-10-06 15:10:39

回答

1

試試這個:

CREATE or replace FUNCTION get_area (face integer) RETURNS float AS $$ 
DECLARE 
     RSLT float; 
BEGIN 
SELECT area into rslt FROM face_area WHERE face_area.face=$1; 
IF NOT FOUND THEN 
    rslt := calc_area ($1); 
    INSERT INTO face_area VALUES ($1,rslt); 
END IF; 
return rslt; 
END; 
$$ LANGUAGE plpgsql; 

你需要有一個return語句。我在RSLT變量中添加了計算區域值並返回它。

+0

謝謝,這是我需要的。 – user3419945 2014-10-06 15:51:17

相關問題