我试图理解postgresql在从内置的标量值函数中进行选择时的行为,例如: current_date和用户定义的那些,特别是在别名时。请看以下示例:
SELECT * FROM CURRENT_DATE AS x;
SELECT x FROM CURRENT_DATE AS x;
SELECT x.x FROM CURRENT_DATE AS x;
以上所有输出相同的东西,当前日期在名为“x”的列中。
现在定义以下功能:
CREATE OR REPLACE FUNCTION
f (r OUT INTEGER)
AS $$
BEGIN
r := 1;
END
$$ LANGUAGE plpgsql;
然后采取以下示例:
SELECT * FROM f() AS x;
SELECT x FROM f() AS x;
SELECT r FROM f() AS x;
SELECT x.r FROM f() AS x;
SELECT x.x FROM f() AS x;
第一个在名为“r”的列中输出值1。第二个输出名为“x”的列中的值。第三个和第四个输出名为“r”的列中的值,与第一个相同。第五个导致错误。
为什么current_date和f函数之间的行为不同?
答案 0 :(得分:0)
不同之处在于您为输出参数指定了名称(r
)。如果你不这样做,那么你的功能就像current_date
一样。