本文由 @小劉先森 原創(chuàng),轉(zhuǎn)載請注明出處询件。
PL/pgSQL系列文章缚忧,方便小伙伴們學(xué)習(xí)僵控。
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)-游標(biāo)
函數(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ù)被命名為標(biāo)識符$1余佃、$2等等暮刃。可選地爆土,能夠?yàn)?n參數(shù)名聲明別名來增加可讀性椭懊。不管是別名還是數(shù)字標(biāo)識符都能用來引用參數(shù)值。
數(shù)字標(biāo)識函數(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)鍵字標(biāo)識返回參數(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é)果實(shí)際上創(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