2014-03-27 38 views
0

我正在嘗試創建一個函數來更新用戶的密碼。這是我的功能。在postgresql中調用更新函數

CREATE OR REPLACE FUNCTION update_user(userid int, upassword text) RETURNS integer AS $$ 
    BEGIN 
UPDATE tbl_user 
    SET password= upassword 
WHERE user_id = userid; 
SELECT 1; 
END; 
$$ 
LANGUAGE plpgsql; 

而我試着用這個函數來執行。

SELECT update_user(1, 'test'); 

我得到了一個錯誤

ERROR: control reached end of function without RETURN CONTEXT: PL/pgSQL function 

我不知道我走到哪裏錯了。請幫助我。我是創建函數的新手。提前致謝。

+0

你說的是函數'RETURNS integer',但是你不會告訴它返回什麼。你期望它做什麼? –

+0

謝謝,我添加了「SELECT 1;」在「END」之前,函數執行並且密碼已經更新。你能幫我捕獲受影響的行,以便我將它傳遞給驗證的返回值。 – saran

+0

它在手冊中 - 請參閱'GET DIAGNOSTICS'。但是我真的不明白你爲什麼要把這個語句包裝在這樣的函數中,而不是直接在調用站點上做這件事。 –

回答

2

每個PL/pgSQL函數都需要一個RETURN語句。但是,在你的情況,你可以用SQL語言功能做:

CREATE OR REPLACE FUNCTION update_user(userid int, upassword text) RETURNS void AS $$ 
    UPDATE tbl_user 
    SET password = upassword 
    WHERE user_id = userid; 
$$ LANGUAGE sql; 

只有當你需要做更精細的處理(例如,使用本地變量,處理邏輯或觸發器),你需要一個PL/pgSQL函數。

+1

或者只是將您的函數重新定義爲'RETURNS VOID'。 –