2013-07-23 107 views
3

函數是否可以返回一條記錄,但如果存在空結果集,則返回零記錄。例如:從函數返回0或1行

如果我不包含數據的空表...

CREATE TABLE Foo 
(
    FooID SERIAL CONSTRAINT PK_Foo PRIMARY KEY, 
    FooValue INTEGER NOT NULL 
); 

...和...功能

CREATE OR REPLACE FUNCTION GET_OneFoo() 
RETURNS Foo 
AS $$ 
    SELECT 
     FooID, 
     FooValue 
    FROM 
     Foo 
    LIMIT 1 
$$ LANGUAGE SQL; 

...然後...

SELECT GET_OneFoo() 

...結果...

Total query runtime: 11 ms. 
1 row retrieved. 

... ...但是

SELECT 
    FooID, 
    FooValue 
FROM 
    Foo 
LIMIT 1 

...結果...

Total query runtime: 10 ms. 
0 rows retrieved. 

回答

3
+0

謝謝您的回答。我認爲這可能是這種情況。這對性能有任何影響嗎? – Cakez0r

+0

@CakezOr沒有影響。 –

+1

它確實會影響可以稍微調用該函數的上下文,並且它會在「SELECT」列表中調用函數時更改語義 - 返回零行與返回NULL行不同。不過,它不應該對性能產生重大影響。 –