2017-04-10 11 views
1

例えば、このような関数に:selectステートメントがレコードを返さない場合、関数内の変数は何になりますか?

create function 
    example() returns int 
as $$ 
declare 
    x := 0; 
begin 
    x = (select * from table_a where something>10); 
    return x; 
end; 
$$ language plpgsql; 

Xクエリがレコードを返さないとき、どうでしょうか?

+0

明らか機能は、x =(すべて選択)として失敗し、私は1つのだけ値を返すべきか、どのような場合に選択し1列のみ、それが記録されていない何か – maSTAShuFu

+0

の凝集可能性があり数えますか? – Chen

答えて

0

intを返す関数を宣言している場合は、次に関数にはがあり、intを返します。 xを0に初期化しますが、行を戻さない問合せの結果を割り当てる場合はnullに設定します。

xの値は、またはnull::intと入力されたnullとなります。

CREATE OR REPLACE FUNCTION wtf() 
RETURNS int 
AS $$ 
    DECLARE 
    x int := 0; 
    BEGIN 
     RETURN x; 
    END; 
$$ LANGUAGE plpgsql; 

SELECT * FROM wtf(); -- returns 0. 

CREATE OR REPLACE FUNCTION wtf() 
RETURNS int 
AS $$ 
    DECLARE 
    x int := 0; 
    BEGIN 
     x = (SELECT 1 WHERE false); 
     RETURN x; 
    END; 
$$ LANGUAGE plpgsql; 

SELECT * FROM wtf(); -- returns null 
wtf 
----- 

(1 row) 
+0

ありがとう!非常に便利! – Chen

関連する問題