首页 > 代码库 > 2.PL/SQL——PL/SQL概述及其基本结构

2.PL/SQL——PL/SQL概述及其基本结构

一、什么是PL/SQL

    PL/SQL是对SQL语言的扩展。

    SQL语言是一种非过程性语言,即用户只需要告诉计算机做什么,而不需要理解计算机是怎么做的。比如用户要查询一张表里的某一列数据,只需要输入:selectCOLUNM_NAME from TABLE_NAME where CONDITION;就可以了,而不需要了解计算机是如何查询的。这既是优点也是缺点,优点就是该语言非常容易学习,缺点则是缺乏过程控制,限制了其功能,比如无法进行if...else的条件判断,也无法进行for循环操作。

    基于SQL语言的局限性,于是诞生了PL/SQLPL/SQL语言提供了条件判断、循环等等普通程序语言具备的功能。SQL语言是一种标准语言,如OracleMySQLSQL_Server等等都支持,而PL/SQL则是Oracle公司专有的,它将过程控制和SQL语言无缝结合在一起,从而加强了SQL语言的功能。

 

二、PL/SQL的功能

PL/SQL的功能主要有:

    1. PL/SQL提供了块结构,从而实现了模块化设计。任何一种程序语言都提供了函数、过程等基本结构,而函数过程都是将一个大的程序模块化,使得程序更容易开发和维护,PL/SQL也不例外。

     2. PL/SQL提供了一些过程化的结构:

                A. 变量(Variables)、常量(Constants)以及多种数据类型;

                B. 提供了条件分支判断和循环结构;

                C. 提供了一次编译,多次运行的单元。

 

三、PL/SQL的执行机制

    PL/SQL语句在执行时,会分成两个部分,SQL语言部分由Oracle数据库内核中的SQL引擎来执行;PL/SQL的块则会由PL/SQL引擎来执行。

    SQL引擎始终是位于Oracle数据库里面的,PL/SQL引擎则可以位于Oracle数据库内部,也可以独立于Oracle数据库而存在。独立于Oracle数据库存在的PL/SQL引擎多为一些数据库开发工具所提供,在客户端执行,而不是在服务端执行。

wKiom1PlNwmA_a-zAAEU6Rsr06Y709.jpg

 

四、PL/SQL的优点

    PL/SQL的优点主要有:

        1. SQL语言中集成了一些过程控制;

        2. 提高了性能,

                如果单纯的使用SQL语言,那么每执行一条SQL语句,就需要将结果返回到客户端,由客户端根据返回值进行分支控制,然后再执行下一条SQL语句,这个过程会产生大量的I/O操作。

wKiom1PlNxqiqEUsAABUHBrtvoY492.jpg

                与之对应的,使用PL/SQL语言,可以由客户端将要查询的业务代码打包成一个整体,一次性发给Oracle数据库,甚至很多业务逻辑语句已经集成在Oracle数据库的内核里面了,客户端只需要调用一下即可。数据库会在服务端完成所有的操作,再一次性将结果返回给客户端,从而减少了网络数据的传输。

wKioL1PlOEHgrjRbAAB0Jide8rE410.jpg

 

        3.支持模块化编程;

        4. Oracle的很多开发工具都支持PL/SQL语言的开发;

        5. 可移植性(主要是在Oracle数据库之间进行移植,跨数据库,如MySQLOracle之间的移植会比较困难)

        6. 支持异常处理。

 

五、PL/SQL的块结构

 

PL/SQL语言的基本单元就是块,块主要分为以下四个部分:

 

                DECLARE(optional) ——声明部分

                该部分主要定义以下内容:变量(Variables),常量(Constant),指针(cursor),用户自定义的异常(User-definedexceptions)等等。

                               

                BEGINmandatory)——业务逻辑部分

                该部分主要存放业务逻辑:

                         SQL语句

                         PL/SQL语句

               

                EXCEPTION(optional)——异常处理部分

                 该部分主要进行异常的处理

                               

                END;mandatory)——结束部分

               

               

       注意,BEGIN END这两个部分是必须的,而DECLAREEXCEPTION这两个部分是可选的,且只在END最后有个分号,其他的地方都没有          

 

六、块的种类

 

PL/SQL的块主要有以下三种:

 

           A. 匿名块(Anonymous

          匿名块是指没有起名的块,它不是存储在Oracle数据库里的,它一旦被执行过就失效了,不能重复使用;它主要用于写一些测试和临时使用的语句,其结构如下:

                               

                      [DECLARE]                          

                      BEGIN

                        --statements                                    

                     [EXCEPTION]                     

                     END;

               

           B. 过程块(Procedure

           过程块需要起名字,其中PROCEDURE部分相当于匿名块中的DECLARE部分。有名字的块(ProcedureFunction)可以存储在数据库中反复调用,用在比较正式的环境下,其结构如下:

                                               

                      PROCEDURE name

                      IS                           

                      BEGIN

                        --statements                                    

                      [EXCEPTION]                     

                      END;

                               

           C. 函数块(Function                             

           函数块也有名字,它和过程块的区别在于它一定要返回数据,其结构如下:

                               

                       FUNCTION name

                       RETURN datatype

                       IS

                       BEGIN

                         --statements

                       RETURN value

                       [EXCEPTION]                     

                       END;

wKioL1PlOFuAw5AzAAEQSpSY9TY394.jpg

 

七、PL/SQL的程序构建

    PL/SQL的程序可以构建在客户端,也可以构建在服务端,构建在服务端的情况更常见,因为如果构建在客户端,还需要使用Oracle提供的额外开发工具。

    在客户端构建的PL/SQL程序主要内容有:匿名块、过程、函数、包(包是函数和过程的整合)、触发器和一些其他类型的元素;

    在服务端构建的PL/SQL程序主要内容有:匿名块、存储过程和函数、包、触发器和一些其他类型的元素。

wKiom1PlN16h46JtAAHM8LgwBJg479.jpg


本文出自 “重剑无锋 大巧不工” 博客,请务必保留此出处http://wuyelan.blog.51cto.com/6118147/1537687