本文由 @小劉先森 原創(chuàng),轉(zhuǎn)載請注明出處。
PL/pgSQL系列文章,方便小伙伴們學(xué)習。
PL/pgSQL從入門到放棄(1)-入門
PL/pgSQL從入門到放棄(2)-變量定義與數(shù)據(jù)類型
PL/pgSQL從入門到放棄(3)-函數(shù)
PL/pgSQL從入門到放棄(4)-函數(shù)返回各種常用數(shù)據(jù)類型
PL/pgSQL從入門到放棄(5)-控制結(jié)構(gòu)
PL/pgSQL從入門到放棄(6)-游標
函數(shù)聲明
通過執(zhí)行CREATE FUNCTION命令,以PL/pgSQL寫成的函數(shù)可以被定義到服務(wù)器中。
CREATE or REPLACE FUNCTION somefunc(integer, text) RETURNS integer
AS 'function body text'
LANGUAGE plpgsql;
PL/pgSQL是一種塊結(jié)構(gòu)的語言。一個塊被定義為:
[ <<label>> ]
[ DECLARE
declarations
BEGIN
statements
END [ label ];
目前CREATE FUNCTION函數(shù)體就是簡單的一個字符串。通常在寫函數(shù)體時,使用美元符號引用通常比使用普通單引號語法更有幫助。如果沒有美元引用,函數(shù)體中的任何單引號或者反斜線必須通過雙寫來轉(zhuǎn)義。
推薦寫法如下:
CREATE FUNCTION somefunc(integer, text) RETURNS integer AS $$
DECLARE
BEGIN
END;
$$ LANGUAGE plpgsql;
函數(shù)參數(shù)
聲明函數(shù)參數(shù)被命名為標識符$1、$2等等??蛇x地,能夠為$n參數(shù)名聲明別名來增加可讀性。不管是別名還是數(shù)字標識符都能用來引用參數(shù)值。
數(shù)字標識函數(shù)參數(shù)
CREATE FUNCTION hello(varchar) RETURNS varchar AS $$
DECLARE
BEGIN
RETURN '你好,' || $1;
END;
$$ LANGUAGE plpgsql;
示例結(jié)果:
<font size='2px' color='#E7876B'>小劉先森為作者名字</font>

別名函數(shù)參數(shù)
- 創(chuàng)建函數(shù)時為參數(shù)給定一個名稱(推薦)
CREATE FUNCTION hello(name varchar) RETURNS varchar AS $$
DECLARE
BEGIN
RETURN '你好,' || name ;
END;
$$ LANGUAGE plpgsql;
- 顯式地使用聲明語法聲明一個別名
CREATE FUNCTION hello(varchar) RETURNS varchar AS $$
DECLARE
name ALIAS FOR $1;
BEGIN
RETURN '你好,' || name ;
END;
$$ LANGUAGE plpgsql;
函數(shù)返回
-
returns返回
示例函數(shù)就使用returns返回了一個varchar類型的值。
CREATE FUNCTION hello(name varchar) RETURNS varchar AS $$
DECLARE
BEGIN
RETURN '你好,' || name ;
END;
$$ LANGUAGE plpgsql;
-
輸出參數(shù)返回
輸出參數(shù)在返回多個值時很有用。在定義函數(shù)時使用OUT關(guān)鍵字標識返回參數(shù)。示例如下:
CREATE FUNCTION sum_n_product(x int, y int, OUT sum int, OUT prod int) AS $$
BEGIN
sum := x + y;
prod := x * y;
END;
$$ LANGUAGE plpgsql;
<font color='red'>輸出結(jié)果如下:</font>

示例函數(shù)的結(jié)果實際上創(chuàng)建了一個匿名記錄類型。如果使用
RETURNS返回,它必須是RETURNS record。使用RETURNS record返回寫法如下:
CREATE or replace FUNCTION sum_n_product(x int, y int) returns record AS $$
DECLARE
r_data record;
sum int;
prod int;
BEGIN
sum := x + y;
prod := x * y;
r_data = (sum , prod );
return r_data;
END;
$$ LANGUAGE plpgsql;
<font color='red'>輸出結(jié)果如下:</font>


關(guān)于作者
大家有需要介紹哪些部分,或者一些想法歡迎聯(lián)系我。
GISer
QQ: 1016817543
郵箱:1016817543@qq.com
github:https://github.com/MrSmallLiu (歡迎star)
相關(guān)鏈接
歡迎各位Star、Issues、PR