【发布时间】:2015-10-15 08:11:01
【问题描述】:
我有一个返回自定义类型(伪代码)的 plpgsql 函数:
CREATE OR REPLACE FUNCTION my_function(entity_id integer)
RETURNS "CustomType" AS
$BODY$
DECLARE
result "CustomType";
BEGIN
SELECT
INTO result
T."Column1" AS "Column1",
T."Column2" AS "Column2"
FROM "Table1" T
WHERE T."EntityId" = entity_id
--do other stuff here before returning
RETURN QUERY
SELECT
result."Column1",
result."Column2"
END;
$BODY$
LANGUAGE plpgsql VOLATILE
第一个问题是,即使 select 语句不返回任何内容(entity_id 不存在),该函数也会返回一个空行(所有值都为空)。 我使用 Dapper 将结果映射到一个对象,我需要知道是否找到了该对象(NULL 与否)。
第二个问题是这个函数总是只返回一行,即使我删除了 WHERE 子句。 如果我将函数签名更改为直接从 select 返回查询并删除本地“CustomType”变量,则返回多行,因此它按预期工作。
【问题讨论】:
标签: postgresql plpgsql postgresql-9.4