PL/SQL(Procedural Language/SQL)是一种过程化语言,属于第三代语言,它与C、C++、Java等语言一样关注于处理细节,可以用来实现比较复杂的业务逻辑。它允许SQL的数据操纵语言和查询语句包含在块结构(block_structured)和代码过程语言中,使PL/SQL成为一个功能强大的事务处理语言。在甲骨文数据库管理方面,PL/SQL是对结构化查询语言(SQL)的过程语言扩展。PL/SQL的目的是联合数据库语言和过程语言。
PL/SQL的优点如下:
PL/SQL是一种高性能的基于事务处理的语言,能运行在任何ORACLE环境中,支持所有数据处理命令。通过使用PL/SQL程序单元处理SQL的数据定义和数据控制元素。
PL/SQL支持所有SQL数据类型和所有SQL函数,同时支持所有ORACLE对象类型
PL/SQL块可以被命名和存储在ORACLE服务器中,同时也能被其他的PL/SQL程序或SQL命令调用,任何客户/服务器工具都能访问PL/SQL程序,具有很好的可重用性。
可以使用ORACLE数据工具管理存储在服务器中的PL/SQL程序的安全性。可以授权或撤销数据库其他用户访问PL/SQL程序的能力。
PL/SQL代码可以使用任何ASCII文本编辑器编写,所以对任何ORACLE能够运行的操作系统都是非常便利的
对于SQL,ORACLE必须在同一时间处理每一条SQL语句,在网络环境下这就意味作每一个独立的调用都必须被oracle服务器处理,这就占用大量的服务器时间,同时导致网络拥挤。而PL/SQL是以整个语句块发给服务器,这就降低了网络拥挤。
PL/SQL最大的缺点就是将逻辑集中在数据库进行处理,占用了宝贵的数据库计算资源,造成系统并发较低,限制了系统扩展。
我从99年左右开始使用SQL,后续逐渐开始接触及使用PL/SQL等各种存储进程(Stored procedure)。在做C/S架构分布式系统的时候,因为PL/SQL等存储进程具备效率高,调试方便,更新容易(不需要更新客户端)等优点,几乎所有复杂点的逻辑都是使用PL/SQL来实现的。因为面对业务的分布式系统,数据库压力相对不大,所以这么做还没有问题。不过等到转到B/S架构后就碰到了大麻烦,大集中的B/S平台,数据库资源是最宝贵的,继续大量使用PL/SQL的话,系统的并发根本就提不上来,于是就将所有的逻辑从数据库(PL/SQL)转到了中间层,后续又进行了服务化等进一步的拆分。现在我也还继续使用PL/SQL,不过主要是用在日终处理、ETL等逻辑比较复杂又不需要大并发的场合。
大家一起聊一聊:
你是什么时候在什么情况下开始接触PL/SQL的?
你现在主要是用PL/SQL来做什么工作?
PL/SQL有什么特别让你喜欢或者需要改进的地方?
你是否看好PL/SQL乃至Oracle数据库在未来的发展?