我有一个带有可选参数的简单函数。当我遗漏一个默认为 null 的参数时,我得到一个错误,即它不是整数。
这是功能:
CREATE FUNCTION rewrite(_postid integer DEFAULT NULL::integer,
_url character varying DEFAULT NULL::character varying)
RETURNS TABLE
(
PostTypeID integer,
DestinationURL varchar,
)
LANGUAGE plpgsql
AS
$function$
BEGIN
RETURN QUERY
SELECT
NULL AS PostTypeID,
_url AS DestinationURL,
FROM reference.destinations dest1
WHERE length(TRIM(dest1.DestinationURL)) > 0
AND _url LIKE '%' || TRIM(dest1.DestinationURL)) || '%'
ORDER BY length(dest1.DestinationURL)) DESC
LIMIT 1;
END;
$function$
如果我运行,SELECT * FROM utility.rewrite(_url := 'wikipedia.org')
则会收到此错误:
[42804] 错误:查询结构与函数结果类型不匹配详细信息:返回类型文本与第 1 列中的预期类型整数不匹配。
所以column1
必须是PostTypeID
我RETURNS TABLE
定义中的列。但是我选择NULL AS PostTypeID
了为什么它不只是返回NULL?
如果我运行,SELECT * FROM utility.rewrite(_postid = 0, _url := 'wikipedia.org')
那么它工作正常。但我不想0
被退回,我想要 NULL。