之前总结了一下PostgreSQL的序列的相关知识,这篇再来说说存储过程相关的知识点。
存储过程也叫做函数。 PostgreSQL的存储过程是指可以使用SQL对话框进行调用的一组SQL和过程语句(过程语句包括声明,分配,循环,控制流程等),它可以存储在数据库服务器上。
在数据库的实际使用时,存储过程在需要多次查询和操作单个函数的场景中很方便使用。
存储过程的语法
![11389bd6d418a4110af02bf1310eebe6.png](https://i-blog.csdnimg.cn/blog_migrate/934bf20102c98cd2ddd6ec2afc0eb386.png)
其中的相关参数说明:
function_name:指定存储过程的名称;
[OR REPLACE]:是可选的,表示允许修改或替换现有的存储过程;
RETURN:指定要从存储过程返回的数据类型。数据类型可以是基础数据类型,复合数据类型,或者引用表列的类型;
function_body:表示具体可执行的增删改查的部分;
plpgsql:指定实现该存储过程的语言的名称;
存储过程示例
我们先设计一个在customer顾客表里查找最高工资的函数。
首先在数据库里建立一个customer表,并插入一些实例数据
![fe6b306e23f1bae60dee099ea84a18c8.png](https://i-blog.csdnimg.cn/blog_migrate/100a8078af68cfd40a8b1b1444852902.jpeg)
然后在SQL对话框执行关于查找的存储过程函数sql:
![1c19b2369942c49d87b742fbf9209492.png](https://i-blog.csdnimg.cn/blog_migrate/a9205d3d7d2aa0cb3741bf765ddf59a1.jpeg)
具体实际操作如下图:
![8044c83e99de760070c16fa0f7858206.png](https://i-blog.csdnimg.cn/blog_migrate/aeb2072f7abbad50e77c7c9bfef0fc92.jpeg)
然后我们可以在数据库的所有函数中看到新创建了一个maxsalary()的函数:
![f146bd0f20620284dffee278c3a7e699.png](https://i-blog.csdnimg.cn/blog_migrate/6d48f49879778a0179f0fcbf0b290141.jpeg)
接下来我们直接在SQL对话框中执行调用SELECT maxSalary();这个函数可以得到结果:
![1b148c60dbfc870bf26309386a3e0fca.png](https://i-blog.csdnimg.cn/blog_migrate/7ca28687ac60406f9d2ef9085384e867.png)
可以看到,我们找到了customer表里所有人中最高的工资。
看完了概念和用法,再来分析下优缺点。
存储过程的优点:
(1)在第一次被调用后即被编译,下次再调用时不需要再次编译,减少了应用与数据库服务器的通信开销,提升数据库的整体性能
(2)实现一套业务逻辑被不同应用程序共享,减少应用程序的开发复杂度,保证不同应用程序使用的一致性;
(3)屏蔽使用存储过程中的数据,区分应用程序访问数据的权限,从而更细粒度的加强数据库权限的管理;
(4)实现业务与应用程序的解耦。当业务需求更新时,只需更改存储过程的定义,而不需要更改应用程序;
(5)保护数据库元数据,直接使用SQL语句查询数据库会暴露元数据,而使用存储过程则不需要把数据库表结构暴露给应用程序,提高安全性;
存储过程缺点:
(1)不方便调试,
(2)不便于移植到其它数据库。由于不同数据库的存储过程在定义方式,语言及语法上是不同的,所以移植成本的成本比较高;