2017-04-10 1 views
1

Zum Beispiel in einer solchen Funktion:Was wird eine Variable in einer Funktion bekommen, wenn die select-Anweisung keinen Datensatz zurückgibt?

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

Was x sein, wenn die Abfrage keine Aufzeichnung zurückkehrt?

+0

offensichtlich die Funktion fehlgeschlagen als x = (alle auswählen), i nur 1 Wert zurück rechnen sollte oder könnte eine Ansammlung von etwas – maSTAShuFu

+0

was, wenn wählen Sie nur eine Spalte sein, und es hat keine Aufzeichnungen? – Chen

Antwort

0

Wenn Sie die Funktion deklarieren, einen int zurückzugeben. Dann hat die Funktion , um eine int zurückzugeben. Sie initialisieren x auf 0, setzen es jedoch auf null, wenn Sie das Ergebnis einer Abfrage zuweisen, die keine Zeilen zurückgibt.

Also der Wert von x ist null getippt zu int oder null::int.

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

Danke! Sehr hilfreich! – Chen

Verwandte Themen