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后变量名顺序要一一对应,还有就是该类型语句每次只能返回一条记录,如果返回的记录超过一条或没有返回记录都会引发异常。

最新文章

  1. Expert 诊断优化系列------------------透过等待看系统
  2. Struts2动态结果(${})and全局结果(global-results)
  3. 备忘--简单比较SPSS、RapidMiner、KNIME以及Kettle四款数据分析工具
  4. .h头文件 .lib库文件 .dll动态库文件之间的关系
  5. Ignatius and the Princess III --undo
  6. c++引擎开发
  7. iOS开发中遇到的bug
  8. POJ3213(矩阵乘法)
  9. Net Framework中的提供的常用委托类型
  10. Java:注解(Annotation)自定义注解入门
  11. HomeBrew 安装 PHP7.1(开发笔记)
  12. 关于Adobe CC 系列软件反复弹出 Adobe 软件许可问题
  13. android studio中使用lambda
  14. [Swift]LeetCode104. 二叉树的最大深度 | Maximum Depth of Binary Tree
  15. React生命周期简单详细理解
  16. 【转载】 github vue 高星项目
  17. 使用sort对数组中的对象的某个属性进行排序
  18. android-------- 常用且应该学习的框架
  19. 修改vs2005,vs2008,vs2010调试默认浏览器
  20. python的paramiko模块简单应用

热门文章

  1. PopupWindow(1)简介
  2. python programming
  3. 多个版本数据库在在一台数据库上lib 的切换问题。
  4. 150 Evaluate Reverse Polish Notation 逆波兰表达式求值
  5. Vijos p1688 病毒传递 树形DP
  6. DataTable数据导入DataBase
  7. XML验证
  8. 从 fn_dbLog 解析操作日志(补充update)
  9. 洛谷 P1955 程序自动分析
  10. JS怎么创建一个类?