1、认识PL/SQL

  结构化查询语言(Structured Query Language,SQL)是用来访问和操作关系型数据库的一种标准通用语言,它属于第四代语言(4GL),简单易学,使用它可以很方便 地调用相应语句来取得结果。该语言的特点就是非过程化。也就是说,使用的时候不用指明执行的具体方法和途径,即不用关注任何的实现细节。但这个语言也有一个问题,就是在某些情况下满足不了复杂业务流程的需求,这就是第四代语言的不足之处。Oracle中的PL/SQL语言正是为了解决这一问题,PL/SQL属于第三代的语言(3GL),也就是过程化的语言,同Java、C#一样可以关注细节,用它可以实现复杂的业务逻辑。

  PL/SQL(Procedural  Language/Structured  Query Language )是Oracle公司在标准SQL语言基础上进行扩展而形成的一种可以在数据库上进行设计编程的语言,通过Oracle的PL/SQL引擎执行。PL/SQL完全能可以像Java语言一样实现逻辑判断、条件循环以及异常处理等,这是标准的SQL很难办到的事情。由于它的基础是标准的SQL语句,使得数据库开发人员能快速的掌握并运用。PL/SQL特点有:

  • 支持事物控制和SQL数据操作命令。
  • 支持SQL的所有数据类型,并且在此基础上扩展了新的数据类型,也支持SQL的函数以及运算符。
  • PL/SQL可以存储在Oracle服务器中。
  • 服务器上的PL/SQL程序可以使用权限进行控制。
  • Oracle有自己的DBMS包,可以处理数据的控制和定义命令。

2、PL/SQL的优势

  由于PL/SQL语言是从SQL语言扩展而来,所以PL/SQL除了支持SQL数据类型和函数外,同时也支持Oracle对象类型。另外,同传统的SQL语言相比PL/SQL有以下几个优点:

  (1)可以提高程序的运行性能

  标准的SQL执行时,只能一条一条地向Oracle服务器发送。假如完成一个业务逻辑需要几条甚至几十条SQL语句,那么这个过程中,客户端会几十次的连接数据库服务器,而连接数据库本身是一个很耗费资源的过程,当这个业务被完成时,会浪费大量的资源在网络连接上。

  换用PL/SQL语句,结果则不一样了。PL/SQL的语句块可以包含多条SQL语句,而语句块可以嵌入到程序中,甚至可以存储到Oracle服务器上。这样用户只需要连接一次数据库就可以把需要的参数传递过去,其它的部分将在Oracle服务器内部执行完成,然后返回结果。这样就节省了网络资源的开销。

  (2)可以使程序模块化

  在程序块中可以实现一个或几个 功能。例如,当想把一个动物模型存储到数据库里时,可能涉及几张表,如果使用标准的SQL完成该功能需要多条语句,而使用块,则可以把对多张表的操作都放到一个块内,而对外只提供一个调用方式和需要传入的参数。

  使用块也可以把数据库数据同客户程序隔离开来,使得数据库表结构发生变化时,对调用者的影响减小到最低程度。

  (3)可以采用逻辑控制语句来控制程序结构

  如果一个PL/SQL程序块中只能顺序的执行基本的SQL语句,那么它的意义实在有限。实际上PL/SQL可以利用条件或循环语句来控制程序的流程,这么做就大大增加了PL/SQL的实用性,利用逻辑控制语句来完成复杂的业务。

  (4)利用处理运行时的错误信息

  标准的SQL在遇到错误是会提示异常。一旦有异常就会终止,但是调用者却很难快速的发现错误点在哪儿,即使发现出问题的地方也只能是告诉开发人员该语句程序本身有问题,而不是逻辑上的问题。利用PL/SQL还可以处理一些程序上的异常,不至于因终止SQL操作,而造成SQL的展示页面出现生硬的错误提示。

  3、PL/SQL的结构

  PL/SQL程序的基本单位是块(block),PL/SQL块很明确的分为三部分,其中包括声明部分、执行部分和异常部分。其中,声明部分以DECLARE为开始标志,执行部分以BEGIN 为开始标志,而异常部分以EXCEPTION为开始标志。其中的执行部分是必需的,其余的的两个部分则可选。

  无论PL/SQL程序段的代码量有多少,它的基本结构只是由这三部分组成。

  (1)只有执行体的部分,也就是只有“BEGIN ....END ;”部分,该示例输出一句话:

    BEGIN
      dbms_output.put_line('这是执行体部分。。。');
    END ;

  (2)包含声明和执行两部分的结构

    该示例除了执行体部分还有声明部分,具体操作是声明一个变量,然后为变量赋值,最后输出该变量的值。

  DECLARE
    v_result NUMBER(8,2);
  BEGIN
    v_result:=100/6 ;
    dbms_output.put_line('最后的结果:'||v_result);
  END;

  SELECT....INTO....语句是PL/SQL特有的赋值语句,该语句表示的意思是SELECT后面列出要查询的字段列表,INTO后面是变量名称,它表示把查询出来的值存储到变量中。需要注意的是,SELECT后列名顺序和INTO后变量名顺序要一一对应,还有就是该类型语句每次只能返回一条记录,如果返回的记录超过一条或没有返回记录都会引发异常。

PL/SQL编程接触的更多相关文章

  1. ORACLE PL/SQL编程详解

    ORACLE PL/SQL编程详解 编程详解 SQL语言只是访问.操作数据库的语言,并不是一种具有流程控制的程序设计语言,而只有程序设计语言才能用于应用软件的开发.PL /SQL是一种高级数据库程序设 ...

  2. Oracle数据库编程:PL/SQL编程基础

    2.PL/SQL编程基础: PL/SQL块:        declare        定义部分        begin        执行部分        exception        异 ...

  3. pl/sql编程

    body { font-family: "Microsoft YaHei UI","Microsoft YaHei",SimSun,"Segoe UI ...

  4. [强烈推荐]ORACLE PL/SQL编程详解之七:程序包的创建与应用(聪明在于学习,天才在于积累!)

    原文:[强烈推荐]ORACLE PL/SQL编程详解之七:程序包的创建与应用(聪明在于学习,天才在于积累!) [强烈推荐]ORACLE PL/SQL编程详解之七: 程序包的创建与应用(聪明在于学习,天 ...

  5. ORACLE PL/SQL编程之八:把触发器说透

    原文:ORACLE PL/SQL编程之八:把触发器说透 ORACLE PL/SQL编程之八: 把触发器说透 大家一定要评论呀,感谢!光发表就花了我将近一个下午. 本篇主要内容如下: 8.1 触发器类型 ...

  6. [推荐]ORACLE PL/SQL编程之五:异常错误处理(知已知彼、百战不殆)

    原文:[推荐]ORACLE PL/SQL编程之五:异常错误处理(知已知彼.百战不殆) [推荐]ORACLE PL/SQL编程之五: 异常错误处理(知已知彼.百战不殆) 继上三篇:ORACLE PL/S ...

  7. ORACLE PL/SQL编程之六:把过程与函数说透(穷追猛打,把根儿都拔起!)

    原文:ORACLE PL/SQL编程之六:把过程与函数说透(穷追猛打,把根儿都拔起!) ORACLE PL/SQL编程之六: 把过程与函数说透(穷追猛打,把根儿都拔起!)   继上篇:ORACLE P ...

  8. [推荐]ORACLE PL/SQL编程详解之三:PL/SQL流程控制语句(不给规则,不成方圆)

    原文:[推荐]ORACLE PL/SQL编程详解之三:PL/SQL流程控制语句(不给规则,不成方圆) [推荐]ORACLE PL/SQL编程详解之三: PL/SQL流程控制语句(不给规则,不成方圆) ...

  9. [推荐]ORACLE PL/SQL编程之四:把游标说透(不怕做不到,只怕想不到)

    原文:[推荐]ORACLE PL/SQL编程之四:把游标说透(不怕做不到,只怕想不到) [推荐]ORACLE PL/SQL编程之四: 把游标说透(不怕做不到,只怕想不到) 继上两篇:ORACLE PL ...

随机推荐

  1. bzoj 4821 [Sdoi2017]相关分析

    题面 https://www.lydsy.com/JudgeOnline/problem.php?id=4821 题解 做法显然 就是维护一颗线段树 里面装4个东西 区间x的和 区间y的和 区间$x^ ...

  2. 16G 手机清理

    1.16G 手机清理 清理top 5 的应用的缓存即可 2,hw wife 连接模块 低于 app wifi 的连接模块. 在同样的电脑热点面前,hw 连补上电脑热点,apple 可以连上电脑热点. ...

  3. 482 License Key Formatting 注册码格式化

    详见:https://leetcode.com/problems/license-key-formatting/description/ C++: class Solution { public: s ...

  4. Backbone学习记录(6)

    路由 backbone将路由规则和一个方法名绑定到一起,来控制单页的hash,以及单页的前进后退. var UserRouter = Backbone.Router.extend({ routes: ...

  5. CentOS 7.2安装pip

    CentOS 7.2默认安装的python版本为python2.7.5,我的系统里面默认是没有安装pip 的,搜了下网上各路大侠的解决办法,如下: 使用yum安装python-pip,但是报错,说没有 ...

  6. idea web项目热部署

    之前用idea写web项目的时候,一直都是改一点东西就要重启一下,很烦.今天终于忍受不了百度了一下idea怎么热部署web项目. 在此记录下. 第一步 编辑tomcat配置 第二步 选择打包的项目,并 ...

  7. 微信小程序 开放能力学习

    1. 用户信息小程序登录使用微信的个人信息快速搭建用户体系,登录逻辑:小程序向微信获取code 给服务端生成用户. 说明1. 小程序端调用 wx.login() 获取临时登录凭证 code,并传到服务 ...

  8. 更新centos系统的python版本

    因今天安装一程序需要用到python高版本,所以升级来系统自带的python. 先查询下系统的python版本是多少. #python -V 显示出来的是2.4.3,太老了,现在升级到比较稳定的版本3 ...

  9. like SQL注入与防止 (bin2hex unhex)

    普通的列表模糊查询,可能会被sql注入利用,造成数据泄漏,严重的甚至导致删表删库! 程序中sql语句拼装: $sql = 'student_name like '"%'.$name.'%&q ...

  10. 30行代码消费腾讯人工智能开放平台提供的自然语言处理API

    腾讯人工智能AI开放平台上提供了很多免费的人工智能API,开发人员只需要一个QQ号就可以登录进去使用. 腾讯人工智能AI开放平台的地址:https://ai.qq.com/ 里面的好东西很多,以自然语 ...