PL/pgsql函数的参数是以$1,$2这样标识符来进行传递,也支持命名参数,所以参数的定义可以用下面的方式。
无命名参数
teledb=# CREATE OR REPLACE FUNCTION f2(text) RETURNS TEXT AS
teledb-# $$
teledb$# BEGIN
teledb$# RETURN $1;
teledb$# END;
teledb$# $$
teledb-# LANGUAGE PLPGSQL;
CREATE FUNCTION
teledb=# SELECT * FROM f2('teledb');
f2
---------
teledb
(1 row)
给标识符指定别名
teledb=# CREATE OR REPLACE FUNCTION f2(text) RETURNS TEXT AS
teledb-# $$
teledb$# DECLARE
teledb$# a_xm ALIAS FOR $1; --a_xm是$1的别名
teledb$# BEGIN
teledb$# RETURN a_xm;
teledb$# END;
teledb$# $$
teledb-# LANGUAGE PLPGSQL
teledb-# ;
CREATE FUNCTION
teledb=# SELECT * FROM f2('teledb');
f2
---------
teledb
(1 row)
命名参数
teledb=# CREATE OR REPLACE FUNCTION f2(a_xm text) RETURNS TEXT AS
teledb-# $$
teledb$# DECLARE
teledb$# v_xm ALIAS FOR $1;
teledb$# BEGIN
teledb$# RAISE NOTICE 'a_xm = % ; v_xm = % ; $1 = %',a_xm,v_xm,$1;
teledb$# RETURN $1;
teledb$# END;
teledb$# $$
teledb-# LANGUAGE PLPGSQL;
CREATE FUNCTION
teledb=# SELECT * FROM f2('teledb');
NOTICE: a_xm = teledb ; v_xm = teledb ; $1 = teledb
f2
---------
teledb
(1 row)