如何在Postgres sql函数中引用命名参数?

前端之家收集整理的这篇文章主要介绍了如何在Postgres sql函数中引用命名参数?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
Postgres noobie在这里.

我正在尝试将sql Server存储过程转换为Postgres函数.目前无法弄清楚如何将此sql行转换为Postgres.

sql Server:

input: @name = null

SELECT *
FROM table
WHERE name = ISNULL(@name,name)

Postgres的:

input: n = null

SELECT *
FROM table
WHERE name = COALESCE(n,name)

我收到错误“列n不存在”.如何在Postgres函数的select语句中引用参数?

更新:

Postgres函数的定义

CREATE OR REPLACE FUNCTION fn_name (n VARCHAR(32) = NULL,name OUT varchar(32),description OUT varchar(64))
RETURNS setof record
AS 
$$
    SELECT u.name,u.description
    FROM table_a u
    WHERE u.name = COALESCE(n,u.name);

$$
LANGUAGE sql;

解决方法

修订:正如评论中所指出的,这个答案在2012年初编写时是准确的,但自2012年底发布的v9.2以来,已经支持命名参数.

函数language SQL中时,参数名称仅仅是装饰.您可以在定义为语言plpgsql的存储过程中按名称使用参数.

因此,您必须使用$X引用函数args,其中X是函数参数列表的序数位置(从1开始).

CREATE OR REPLACE FUNCTION fn_name (
  n VARCHAR(32) = NULL,OUT name varchar(32),OUT description varchar(64) )
RETURNS setof record
AS 
$$
    SELECT u.name,u.description
    FROM table_a u
    WHERE u.name = COALESCE($1,u.name);
$$
LANGUAGE sql;

猜你在找的MsSQL相关文章