返回TABLEvs 的函数和SETOF records其他所有函数之间的区别是什么.
CREATE FUNCTION events_by_type_1(text) RETURNS TABLE(id bigint, name text) AS $$
SELECT id, name FROM events WHERE type = $1;
$$ LANGUAGE SQL STABLE;
CREATE FUNCTION events_by_type_2(text) RETURNS SETOF record AS $$
SELECT id, name FROM events WHERE type = $1;
$$ LANGUAGE SQL STABLE;
Run Code Online (Sandbox Code Playgroud)
这些函数似乎返回相同的结果.看到这个SQLFiddle.
Postgres noobie在这里.
我正在尝试将SQL Server存储过程转换为Postgres函数.目前无法弄清楚如何将此SQL行转换为Postgres.
SQL Server:
input: @name = null
SELECT *
FROM table
WHERE name = ISNULL(@name, name)
Run Code Online (Sandbox Code Playgroud)
Postgres的:
input: n = null
SELECT *
FROM table
WHERE name = COALESCE(n, name)
Run Code Online (Sandbox Code Playgroud)
我收到错误"列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;
Run Code Online (Sandbox Code Playgroud)