PL/SQL编程接触
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编程接触的更多相关文章
- ORACLE PL/SQL编程详解
ORACLE PL/SQL编程详解 编程详解 SQL语言只是访问.操作数据库的语言,并不是一种具有流程控制的程序设计语言,而只有程序设计语言才能用于应用软件的开发.PL /SQL是一种高级数据库程序设 ...
- Oracle数据库编程:PL/SQL编程基础
2.PL/SQL编程基础: PL/SQL块: declare 定义部分 begin 执行部分 exception 异 ...
- pl/sql编程
body { font-family: "Microsoft YaHei UI","Microsoft YaHei",SimSun,"Segoe UI ...
- [强烈推荐]ORACLE PL/SQL编程详解之七:程序包的创建与应用(聪明在于学习,天才在于积累!)
原文:[强烈推荐]ORACLE PL/SQL编程详解之七:程序包的创建与应用(聪明在于学习,天才在于积累!) [强烈推荐]ORACLE PL/SQL编程详解之七: 程序包的创建与应用(聪明在于学习,天 ...
- ORACLE PL/SQL编程之八:把触发器说透
原文:ORACLE PL/SQL编程之八:把触发器说透 ORACLE PL/SQL编程之八: 把触发器说透 大家一定要评论呀,感谢!光发表就花了我将近一个下午. 本篇主要内容如下: 8.1 触发器类型 ...
- [推荐]ORACLE PL/SQL编程之五:异常错误处理(知已知彼、百战不殆)
原文:[推荐]ORACLE PL/SQL编程之五:异常错误处理(知已知彼.百战不殆) [推荐]ORACLE PL/SQL编程之五: 异常错误处理(知已知彼.百战不殆) 继上三篇:ORACLE PL/S ...
- ORACLE PL/SQL编程之六:把过程与函数说透(穷追猛打,把根儿都拔起!)
原文:ORACLE PL/SQL编程之六:把过程与函数说透(穷追猛打,把根儿都拔起!) ORACLE PL/SQL编程之六: 把过程与函数说透(穷追猛打,把根儿都拔起!) 继上篇:ORACLE P ...
- [推荐]ORACLE PL/SQL编程详解之三:PL/SQL流程控制语句(不给规则,不成方圆)
原文:[推荐]ORACLE PL/SQL编程详解之三:PL/SQL流程控制语句(不给规则,不成方圆) [推荐]ORACLE PL/SQL编程详解之三: PL/SQL流程控制语句(不给规则,不成方圆) ...
- [推荐]ORACLE PL/SQL编程之四:把游标说透(不怕做不到,只怕想不到)
原文:[推荐]ORACLE PL/SQL编程之四:把游标说透(不怕做不到,只怕想不到) [推荐]ORACLE PL/SQL编程之四: 把游标说透(不怕做不到,只怕想不到) 继上两篇:ORACLE PL ...
随机推荐
- 浅谈web前端性能优化
前端性能优化: 一.尽可能减少前端http请求. 1.合并优化脚本文件和css文件. 2.同种类型的背景图片尽量放在一起,用css控制显示. 二.使用浏览器缓存. 如果能强制浏览器缓存在本地,将会降低 ...
- Android课程设计第六天欢迎界面(跳转)
注意:课程设计只为完成任务,不做细节描述~ package com.example.myapplication; import android.app.Activity; import android ...
- 解决 Cordova命令突然无法使用问题.
问题背景 之前一直在做 Cordova 方面, 然后准备自己尝试使用 Vue + WebPack 再配合 Cordova 做一个 App . 更新了 npm , 然后然后, 我的 cordova 这个 ...
- 转--oracle查看允许的最大连接数和当前连接数等信息
两个参数间的关系:sessions=1.1*processes+5 目前总结的语句,在查看数据的连接情况很有用,写完程序一边测试代码一边查看数据库连接的释放情况有助于分析优化出一个健壮的系统程序来. ...
- C51之数据范围
在C51中各数据类型的范围如下:如果宏常量大于65536,则要加UL后缀:乘法运算不能只将结果强制类型转换,而应在被乘数前加(unsigned long)强制转换. 2 因为RAM有限,所以运算量大的 ...
- pkill 和 pgrep总结
查看进程ID和方便kill进程 pgrep -d 指定分隔符 pgrep -d ' ' -u root 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 1 -u p ...
- C#中构造函数和析构函数区别
把对象的初始化工作放在构造函数中,把清除工作放在析构函数中.当对象被创建时,构造函数被自动执行.当对象消亡时,析构函数被自动执行.这样就不用担心忘记对象的初始化和清除工作. 析构函数是由垃圾回收器控制 ...
- C#局部类型partial在定义实体类Model中的应用
以前一直用继承类的方法,原来还可以这样 //例如:定义一个Person的实体类,用户ID(PersonId),姓名(Name),性别(Sex),年龄(Age),地址(Address),联系方式(Tel ...
- Vue 组件 data为什么是函数
在创建或注册模板的时候,传入一个data属性作为用来绑定的数据.但是在组件中,data必须是一个函数,而不能直接把一个对象赋值给它. Vue.component('my-component', { t ...
- 将自己的数据制作成voc格式
VOCdevkit2007文件下只保存VOC2007,VOC2007下只保存Annotations ImageSets JPEGImages. JPEGImages存放所有的图片数据(即训练测试验证的 ...