3

Is it possible for a function to return one record, but return zero records if there is an empty result set. For example:

If I have an empty table that contains no data...

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

... and a function ...

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

... then ...

SELECT GET_OneFoo()

... results in ...

Total query runtime: 11 ms.
1 row retrieved.

... however ...

SELECT
    FooID,
    FooValue
FROM
    Foo
LIMIT 1

... results in ...

Total query runtime: 10 ms.
0 rows retrieved.
4

1 回答 1

3
RETURNS setof Foo

在而不是

RETURNS Foo

后者返回一个复合类型:

http://www.postgresql.org/docs/current/static/rowtypes.html

http://www.postgresql.org/docs/current/static/extend-type-system.html#AEN51678

于 2013-07-23T18:24:20.543 回答