设为首页 收藏本站
查看: 1264|回复: 0

[经验分享] 2.PL/SQL——PL/SQL概述及其基本结构

[复制链接]

尚未签到

发表于 2018-10-24 08:37:57 | 显示全部楼层 |阅读模式
  一、什么是PL/SQL
  PL/SQL是对SQL语言的扩展。
  SQL语言是一种非过程性语言,即用户只需要告诉计算机做什么,而不需要理解计算机是怎么做的。比如用户要查询一张表里的某一列数据,只需要输入:selectCOLUNM_NAME from TABLE_NAME where CONDITION;就可以了,而不需要了解计算机是如何查询的。这既是优点也是缺点,优点就是该语言非常容易学习,缺点则是缺乏过程控制,限制了其功能,比如无法进行if...else的条件判断,也无法进行for循环操作。
  基于SQL语言的局限性,于是诞生了PL/SQL。PL/SQL语言提供了条件判断、循环等等普通程序语言具备的功能。SQL语言是一种标准语言,如Oracle、MySQL、SQL_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引擎多为一些数据库开发工具所提供,在客户端执行,而不是在服务端执行。
DSC0000.jpg

  四、PL/SQL的优点
  PL/SQL的优点主要有:
  1. 在SQL语言中集成了一些过程控制;
  2. 提高了性能,
  如果单纯的使用SQL语言,那么每执行一条SQL语句,就需要将结果返回到客户端,由客户端根据返回值进行分支控制,然后再执行下一条SQL语句,这个过程会产生大量的I/O操作。
DSC0001.jpg

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

  3.支持模块化编程;
  4. Oracle的很多开发工具都支持PL/SQL语言的开发;
  5. 可移植性(主要是在Oracle数据库之间进行移植,跨数据库,如MySQL和Oracle之间的移植会比较困难)
  6. 支持异常处理。
  五、PL/SQL的块结构
  PL/SQL语言的基本单元就是块,块主要分为以下四个部分:
  DECLARE(optional) ——声明部分
  该部分主要定义以下内容:变量(Variables),常量(Constant),指针(cursor),用户自定义的异常(User-definedexceptions)等等。
  BEGINmandatory)——业务逻辑部分
  该部分主要存放业务逻辑:
  SQL语句
  PL/SQL语句
  EXCEPTION(optional)——异常处理部分
  该部分主要进行异常的处理
  END;mandatory)——结束部分
  注意,BEGIN 和 END这两个部分是必须的,而DECLARE和EXCEPTION这两个部分是可选的,且只在END最后有个分号,其他的地方都没有
  六、块的种类
  PL/SQL的块主要有以下三种:
  A. 匿名块(Anonymous
  匿名块是指没有起名的块,它不是存储在Oracle数据库里的,它一旦被执行过就失效了,不能重复使用;它主要用于写一些测试和临时使用的语句,其结构如下:
  [DECLARE]                          
  BEGIN
  --statements                                    
  [EXCEPTION]                     
  END;
  B. 过程块(Procedure
  过程块需要起名字,其中PROCEDURE部分相当于匿名块中的DECLARE部分。有名字的块(Procedure和Function)可以存储在数据库中反复调用,用在比较正式的环境下,其结构如下:
  PROCEDURE name
  IS                           
  BEGIN
  --statements                                    
  [EXCEPTION]                     
  END;
  C. 函数块(Function)                              
  函数块也有名字,它和过程块的区别在于它一定要返回数据,其结构如下:
  FUNCTION name
  RETURN datatype
  IS
  BEGIN
  --statements
  RETURN value;
  [EXCEPTION]                     
  END;
DSC0003.jpg

  七、PL/SQL的程序构建
  PL/SQL的程序可以构建在客户端,也可以构建在服务端,构建在服务端的情况更常见,因为如果构建在客户端,还需要使用Oracle提供的额外开发工具。
  在客户端构建的PL/SQL程序主要内容有:匿名块、过程、函数、包(包是函数和过程的整合)、触发器和一些其他类型的元素;
  在服务端构建的PL/SQL程序主要内容有:匿名块、存储过程和函数、包、触发器和一些其他类型的元素。
DSC0004.jpg



运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-625693-1-1.html 上篇帖子: 1.PL/SQL——准备工作和实验环境简介 下篇帖子: ORA-01555 caused by SQL statement below
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表