Postgres noobie在这里。
我正在尝试将SQL Server存储的proc转换为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起已支持命名参数。
当您的函数使用SQL语言时,参数名称仅是修饰。您可以在定义为的存储过程中按名称使用参数language plpgsql。
language 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;