sql函数中参数$ 1的含义

时间:2019-02-13 10:10:39

标签: postgresql

绝对新秀问题。在课程中,我们使用Postgressql函数,例如:

CREATE FUNCTION Raptor_lastSurveyDate1(bigint) RETURNS date As $$
  SELECT max(date) FROM raptor_surveys WHERE nest=$1;
$$ LANGUAGE SQL

或:

CREATE FUNCTION Raptor_lastSurveyDate2(bigint) RETURNS date As $$
  SELECT date FROM raptor_surveys WHERE nest=$1 ORDER BY date DESC LIMIT 1;
$$ LANGUAGE SQL

这个$ 1参数是什么意思?

附录:

select * from raptor_surveys delivers this table:

enter image description here

3 个答案:

答案 0 :(得分:3)

$1 references第一个参数传递给函数,$2将引用第二个参数,依此类推。

$1作为参数“名称”的使用之前,在Postgres 9.2中为SQL函数引入了命名参数

对于任何现代Postgres版本,我都会重写它以使用命名参数:

CREATE FUNCTION Raptor_lastSurveyDate1(p_some_value bigint) 
  RETURNS date 
As $$
  SELECT max(date) 
  FROM raptor_surveys 
  WHERE nest = p_some_value;
$$ LANGUAGE SQL

答案 1 :(得分:2)

传递给函数的参数用标识符$ 1,$ 2等命名。(可选)可以为$ n参数名称声明别名,以提高可读性。 https://www.postgresql.org/docs/current/plpgsql-declarations.html

答案 2 :(得分:2)

$1是对该函数第一个参数的引用。您的函数都有一个bigint类型的参数。在函数体内,$1可以引用此参数。

有关更多详细信息,请参见文档:https://www.postgresql.org/docs/current/xfunc-sql.html#XFUNC-SQL-FUNCTION-ARGUMENTS