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 ...
随机推荐
- django接受表单
from django.shortcuts import render from django.shortcuts import HttpResponse import os # Create you ...
- Hdu 5439 Aggregated Counting (2015长春网络赛 ACM/ICPC Asia Regional Changchun Online 找规律)
题目链接: Hdu 5439 Aggregated Counting 题目描述: 刚开始给一个1,序列a是由a[i]个i组成,最后1就变成了1,2,2,3,3,4,4,4,5,5,5.......,最 ...
- 【模板】c++动态数组vector
相信大家都知道$C$++里有一个流弊的$STL$模板库.. 今天我们就要谈一谈这里面的一个容器:动态数组$vector$. $vector$实际上类似于$a[]$这个东西,也就是说它重载了$[]$运算 ...
- Android屏幕适配-安卓切图
一.Android中的单位 1.dp(dip):density-independent pixels,这并不是一个绝对的单位,而只是一个相对的概念,代表的是屏幕写对角线上每inch上像素点的个数. 2 ...
- AJPFX总结java 中类的创建和使用
//面向对象中类的创建和 调用 ============================================================= 类的使用: 类的使用分为两个动作:创建对象与 ...
- List<DTO>转 Map<String,List<DTO>> 两种写法
List<TeamScheduleDTO> list = JSON.parseArray(response.getData().getJSONArray("list") ...
- 基于udp协议的套接字及udp协议粘包问题
udp协议的套接字 udp协议传输 服务端和客户端没有建立连接一说. import socket # 总结一下基础工作流程:服务端生成套接字并绑定ip_port,进入数据传输循环,服务端接受客户端发 ...
- canvas基础绘制-绚丽时钟
效果图: 与canvas基础绘制-绚丽倒计时的代码差异: // var endTime = new Date();//const声明变量,不可修改,必须声明时赋值: // endTime.setTim ...
- Git使用简析
推送本地操作 初始化一个本地Git仓库,在需要添加版本控制的文件夹根目录中使用git init命令. 添加文件到本地Git仓库: git add 文件名 # 添加文件到暂存区 git add . # ...
- Android图片压缩上传(二)
之前有用到libjpeg,还是有一定的局限性,最近用了一个新的方式,效果还是挺不错,随着作者的版本更新,Bug也随之变少,目前项目中运用已上线. 1.之前的方式Android图片压缩,不失真,上线项目 ...