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. Qt样式表之三:实现按钮三态效果的三种方法

    按钮的三态,指的是普通态.鼠标的悬停态.按下态.Qt中如果使用的是默认按钮,三态的效果是有的,鼠标放上去会变色,点击的时候有凹陷的效果. 但是如果自定义按钮实现三态效果有三种方法,一种是设置背景图,主 ...

  2. 二分查找 BestCoder Round #42 1002 Gunner II

    题目传送门 /* 题意:查询x的id,每次前排的树倒下 使用lower_bound ()查找高度,f[i]记录第一棵高度为x树的位置,查询后+1(因为有序) */ #include <cstdi ...

  3. 转 PHP文件上传$_FILES数组各键值含义说明

    文件上传的html表单: <form enctype="multipart/form-data" action="" method="POST& ...

  4. Linux Export命令

    一.Windows 环境变量 1.在Windows 系统下,很多软件安装都需要配置环境变量,比如 安装 jdk ,如果不配置环境变量,在非软件安装的目录下运行javac 命令,将会报告找不到文件,类似 ...

  5. RHEL 6.5 ----Postfix邮件服务器

    主机名 IP  服务  master 192.168.30.130   slave 192.168.30.131   软件包介绍 包名  介绍  postfix-2.6.6-2.2.el6_1.x86 ...

  6. php多文件上传类(含示例)

    在网上看到一个比较好的多文件上传类,自己改良了下,顺便用js实现了多文件浏览,php文件上传原理都是相同的,多文件上传也只是进行了循环上传而已,当然你也可以使用swfupload进行多文件上传! &l ...

  7. C#中构造函数和析构函数区别

    把对象的初始化工作放在构造函数中,把清除工作放在析构函数中.当对象被创建时,构造函数被自动执行.当对象消亡时,析构函数被自动执行.这样就不用担心忘记对象的初始化和清除工作. 析构函数是由垃圾回收器控制 ...

  8. 解决spring boot websocket

    在网上找的demo写了一个小例子,本地开发测试都很正常,但是部署在tomcat就各种坑 1.MyWebSocket不要用spring 注解标注 2.main方法对应的类继承SpringBootServ ...

  9. 001.JS特效

    一.Js实现单行文本的滚动 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http ...

  10. 【学习笔记】深入理解js原型和闭包系列学习笔记——精华

    深入理解js原型和闭包笔记: 1.“一切皆是对象”,对象是属性的集合. 丨 函数也是对象,但是使用typeof时为什么函数返回function而 丨  不是object呢,js为何要对函数做这样的区分 ...