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;
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。