目录
一、过程化SQL简介
SQL的一大优点就是高度非过程化,即开发人员只要面向结果编程,而无需关注具体的实现细节。
然而高度非过程化使SQL语言缺少具体的业务逻辑控制功能,因此嵌入式SQL和过程化SQL应运而生。
嵌入式SQL(Embedded SQL, ESQL)将SQL语句嵌入程序设计与语言(比如C、Java等),借助高级语言的控制功能实现过程化。而过程化SQL(Procedural SQL, PL/SQL)是对SQL的扩展,使其增加了过程化语句功能。因此嵌入式SQL和过程化SQL使SQL具有过程化功能。
本文主要介绍过程化SQL和PostgreSQL的过程化SQL以及怎样使用JDBC调用过程化SQL。
过程化SQL程序的基本结构是块,所有的过程化SQL程序都是由块组成的。过程化SQL块主要有两种类型:命名块和匿名块。
匿名块每次执行时都要进行编译,它不能被存储到数据库中,也不能在其他过程化SQL块中调用,也就是匿名块不能被复用。关于匿名块本文不做具体介绍,本文具体介绍命名块的内容。学会了命名块就相当于学会了匿名块,再去稍微看匿名块的内容就能轻松掌握。
而命名块当然就是能够被复用的了,存储过程和函数就是命名块,它们被编译后保存在数据库中,称为持久性存储模块,可以被反复调用,运行速度较快。
那么什么是存储过程和函数呢?它们之间有什么区别呢(几乎没什么区别)?下面就来结合JDBC与PostgreSQL具体介绍:
二、存储过程
存储过程是由过程化SQL语句书写的过程,这个过程经编译和优化后存储在数据库服务器中,因此称它为存储过程,使用时只要调用即可。
存储过程具有以下优点:
- 由于存储过程会先经过编译和优化后存储在数据库服务器中,因此存储过程不像解释执行的SQL语句那样在提出操作请求时才进行语法分析和优化工作,因而运行效率高,它提供了在服务器端快速执行SQL语句的有效途径。
- 客户机上的应用程序只要通过网络向服务器发出调用存储过程的名字和参数,就可以让关系数据库管理系统执行其中的多条SQL语句并进行数据处理。只有最终的处理结果才返回客户端。因此,存储过程降低了客户机和服务器之间的通信量。
- 方便实施企业规则。可以把企业规则的运算程序写成存储过程放入数据库服务器中,由关系数据库管理系统管理,既有利于集中控制,又能够方便地进行维护。当企业规则发生变化时只要修改存储过程即可,无须修改其他应用程序。
SQL中存储过程的语法是:
CREATE OR REPLACE PROCEDURE 过程名([参数1, 参数2, ...]) /* 函数过程首部 */