PostgreSQL-PL/pgSQL
參考:
https://wiki.postgresql.org/wiki/9.1%E7%AC%AC%E4%B8%89%E5%8D%81%E4%B9%9D%E7%AB%A0
摘記:
PL/pgSQL是 PostgreSQL 數據庫系統的一個可裝載的過程語言。
在PL/pgSQL中你可以把一塊運算和一系列命令在數據庫服務器里面組成一個塊,因此這樣就擁有了過程語言的力量并且簡化 SQL 的使用,并且能大量節約客戶端/服務器通訊之間的開銷。
客戶端和服務端之間額外的傳輸將被取消. 客戶端不需要也不用客戶端和服務端之間進行封裝或者傳輸的中間結果。 可以避免命令的多輪解析在PL/pgSQL中編寫的函數可以用服務器支持的任何標量參數或者數組類型,并且他們可以返回這些類型的任何結果。它們也能接受或者返回任何 聲明的復合類型(行類型)。聲明一個PL/pgSQL函數返回record函數,這意味這這個結果是一個行類型,這個行的字段是在調用它的查詢中指定的。
PL/pgSQL函數能夠用VARIADIC標志聲明一個可變的數字參數。這個方法實際和SQL的函數是用的方法是一樣的。
PL/pgSQL函數也可以聲明并接受返回多態的類型anyelement, anyarray, anynonarray, 和anyenum。一個多態的函數實際操作的數據類型可以在不同的調用環境中變化。
PL/pgSQL函數也能聲明并返回單個實例的任意一個數據類型集(或者表)。這樣的函數通過為結果集每個需要返回的元素執行一個RETURN NEXT生成它的輸出,或者用RETURN QUERY的輸出來評估一個查詢的結果。
最后,PL/pgSQL 函數可以聲明為返回void,如果它沒什么有用的值可以返回的話。
PL/pgSQL函數也能夠用輸出的參數來進行聲明并代替一個明確的返回類型。這不會為這個語言添加任何基本的功能,但是這樣常常是很方便的,特別是返回多個值的時候。這個RETURNS TABLE表示法也能用RETURNS SETOF進行替換。
?
?
我覺得雖然plpgsql是過程語言,但是pg中所編寫的過程基本上都屬于函數,因為關鍵字create function 和 returns 是固定的,而mysql中可以分開create 存儲過程procedure 和函數function 兩類,function 都是要明確返回類型的,那再在從上述PL/pgSQL 函數可以聲明為返回void可以看出plpgsql 一樣可以“模仿”完成procedure的功能扮演,是殊途同歸的,只是pg上更加強調這是一種語言:PL/pgSQL,而mysql只是單純的具備了可編寫存儲過程和函數這兩種功能。
?
?
?
?
yun=> \dL語言列表名稱 | 擁有者 | 信任 | 描述 ---------+----------+------+------------------------------plpgsql | postgres | t | PL/pgSQL procedural language (1 行記錄)?
轉載于:https://www.cnblogs.com/right-dress/p/4838623.html
總結
以上是生活随笔為你收集整理的PostgreSQL-PL/pgSQL的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 20135219洪韶武——信息安全系统设
- 下一篇: 二叉树的定义、性质、存储