関数が 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.