登陆注册
18668900000014

第14章 PL/SQL编程基础(1)

6.1 PL/SQL的简介

PL/SQL(Procedure Language and SQL)是Oracle对SQL的一种扩充,它集成了程序化设计语言中的许多特性。SQL是一种存取Oracle数据库的语言,PL/SQL则将SQL的强大性和灵活性与过程化语言的过程性融为一体。PL/SQL通过增加在其他过程化语言中的结构来对SQL进行扩充,所以PL/SQL既具有对数据库存取功能比较强的特点,可以使用SQL语句中的查询语句和数据操纵语句对数据库进行操作,又具有过程化语言的条件判断、循环、出错处理等特点。PL/SQL是一个强大的事务处理语言,支持SQL中的DML语句及TCL语句(事务控制语句),但不支持DDL语句和DCL语句,不过可以使用Oracle内置包DBMSSQL执行DDL语句和DCL语句。

PL/SQL将Oracle服务器与其他工具结合起来,可以从各种工具和各种环境中访问Oracle数据库。PL/SQL不是一个独立的产品,而是嵌入在Oracle服务器和Oracle开发工具中的,所以在Oracle客户端的各种工具和服务器中都可以编写PL/SQL程序。

6.1.1 PL/SQL的优点

PL/SQL具备SQL的功能和SQL语言所不具备的过程化功能,主要优点如下。

过程化和模块化:将逻辑上相关的语句组织在一个PL/SQL程序块中。

使用过程化语言的控制结构:可以有条件地执行一系列语句、可以重复地执行一系列语句、使用显式游标处理多行查询返回结果中的每一行。

错误处理:使用EXCEPTION处理语句处理服务器的错误和用户自定义的错误。

可移植性:可以将程序移植到任何支持Oracle和PL/SQL的主机环境中。

集成:通过PL/SQL可以将前台和后台技术结合起来。

改善性能:PL/SQL可以改善一个应用的性能、减少网络的流量。

6.1.2 PL/SQL的特点

PL/SQL是一种高性能的事务处理语言,支持所有的事务控制命令(如:COMMIT、ROLLBACK等命令)。

可移植到任何Oracle的环境中,并且支持所有SQL数据操纵命令(如:SELECT、DELETE、UPDATE、INSERT等命令)。

使用Oracle所提供的特殊的PL/SQL程序包DBMSSQL可以处理SQL的DDL命令(如:CREATE、DROP、ALTER等命令)和DCL命令(如:GRANT、REVOKE等命令)。

PL/SQL支持所有SQL数据类型(如:NUMBER、VARCHAR2、DATE等类型)、SQL函数(如:SUBSTR、NEXTDAY、ROUND等函数)和各种运算符(如:IN、BETWEEN AND、LIKE等运算符)。

PL/SQL块可以被命名并存储在Oracle 服务器中,可以在另一个PL/SQL程序或SQL命令行中被存取和重用。

存储在服务器上的PL/SQL程序的安全性可以使用授权和回收权限进行管理。

注意:在PL/SQL中使用SELECT 语句的语法与标准SQL中的SELECT 语法有区别。其他PL/SQL所支持的SQL命令在标准SQL和PL/SQL中则没有区别。

标准SQL中的SELECT语法如下:

SELECT 列名,列名……

FROM 表

WHERE 条件……

而在PL/SQL中的SELECT 语法为:

SELECT 列名,列名……

INTO 变量1,变量2……

FROM 表

WHERE 条件……;

6.1.3 如何编写和编译PL/SQL程序块

因为PL/SQL是嵌入在Oracle服务器和Oracle开发工具中的,所以在Oracle客户端的各种工具和服务器中都可以编写PL/SQL程序。在客户端的PL/SQL Developer Tool开发工具、Developer6i开发工具或SQL*Plus工具中都可以编写PL/SQL块,在服务器端的PL/SQL DeveloperTool开发工具或SQL*Plus工具中也可以编写PL/SQL块。

以SQL*Plus工具为例,举例说明如何编写、编译和运行PL/SQL程序块,步骤如下:

启动SQL*Plus工具。单击“开始”→“程序”→“Oracle-OraHome92”→“Application Development”→“SQL Plus”,启动SQL*Plus工具,弹出登录窗口,要求输入用户名、口令和连接字符串。输入用户名为scott,口令为tiger,连接字符串是第4章介绍的网络服务名,输入ORCL1。此时出现SQL>提示符,表示SQL*Plus工具已连接到Oracle数据库。

在SQL>提示符下输入下列语句:

SQL>edit c:\plsqlblock1.sql

表示在C盘的根目录下编辑一个脚本文件plsqlblock1.sql,此时弹出一个窗口,询问此文件不存在,是否要建立一个新文件,选择“是”,系统启动记事本编辑此文件。

在记事本的编辑窗口中输入PL/SQL块的语句(PL/SQL块结构参见6.2.1.1节),在END结束符的下一行开头加“/”作为结束标志。

在记事本的编辑窗口中保存刚输入的PL/SQL块的语句,关闭该编辑窗口。

回到SQL>提示符,在该提示符下输入下列命令:

SQL>SET serveroutput ON

SQL>START c:\plsqlblock1.sql

首先激活dbmsoutput包,以便在PL/SQL块中可以引用dbmsoutput包将变量的值输出在屏幕上,接着编译和运行该PL/SQL块,查看该块是否有语法错误和逻辑错误。

如果显示已成功运行的提示信息,说明上述PL/SQL块没有语法错误。可以将PL/SQL块的运行结果输出,或以别的形式验证块是否有逻辑错误。如果显示编译有错,应该检查PL/SQL块的语句和语法,然后重新编译,直到编译成功为止。

6.2 PL/SQL 程序结构

6.2.1 块结构

PL/SQL是块结构化的语言。组成一个PL/SQL程序的单元是逻辑块(BLOCK)。PL/SQL程序由一个或多个块组成。这些块可以顺序出现、也可以相互嵌套。

6.2.1.1 块的基本结构

每一个块分成三部分,其基本结构如下:

[DECLARE]

——说明部分(可选的)

BEGIN

——语句执行部分(必需的)

[EXCEPTION]

——出错处理程序(可选的)

END;

/

其中:只有语句执行部分是必需的,其他两部分都是可选的。

说明部分包含在块的可执行部分中要用到的所有变量、常量、数据类型、游标和用户定义的错误等对象的定义。以关键字DECLARE开始,所有对象在使用之前必须定义。假如不需要定义变量等,可省略这部分。

执行部分是PL/SQL块中必需的,定义块要完成的处理工作。以关键字BEGIN开始。可以包含操作数据库数据的SQL语句和操作块中数据的PL/SQL语句。

出错处理部分是一个可选部分,指定在执行部分中发生了错误和非正常条件时执行的动作。定义了对各种错误的处理方法,由可执行语句去处理每一个错误。

注意:各部分的关键字DECLARE、BEGIN、EXCEPTION不必用分号(;)结束,而END和所有其他的PL/SQL语句都要求以分号(;)结束。分号(;)是PL/SQL中语句的分界符。一行的注释可以用两个连接符(——)开头,一段语句的注释用/*和*/包围。

6.2.1.2 嵌套块结构

PL/SQL块中可以包含子块,子块可位于PL/SQL块中的任何部分。子块也可是一条PL/SQL命令。

例6-1 举例说明块的嵌套结构。

[DECLARE]

……/*说明部分*/

BEGIN

……/*主块的语句执行部分*/

BEGIN

……/*子块的语句执行部分*/

[EXCEPTION]

……/*子块的出错处理程序*/

END

[EXCEPTION]

……/*主块的出错处理程序*/

END

同类推荐
  • 学校计算机实用技术

    学校计算机实用技术

    本书由杭州市上城区教育学院编著,他们邀请了众多信息技术教育教学的一线专家,认真细致地筛选了学校计算机应用方面的常见问题,提出了解决问题的具体操作方案,旨在帮助一线教育工作者解决可能面临的种种问题,为广大教师提供便捷服务。
  • 大话设计模式

    大话设计模式

    本书主要采用JAVA语言介绍设计模式中比较常见的23种设计模式,分29章具体介绍,以现实生活中常见的事情为例来具体分析讲解。
  • 条形码技术与应用

    条形码技术与应用

    条形码是一种可供电子仪器自动识别的标准符号,是由一组黑白相间、粗细不同的条、空符号按一定编码规则排列组成的标记,用以表示一定的信息,确认某个物体或规定它的移动,能正确快速地为产、供、销各环节在采集、处理和交换信息时提供标识。
  • 玩转手机

    玩转手机

    本书主要包括:手机的发展历史、手机知识、手机的选购与巧用、手机与网络、手机短信等内容。
  • 初级会计电算化

    初级会计电算化

    本书是作者根据历年会计从业资格考试的考试大纲以及多年对真题的分析,并结合多为专家、学者的实践经验而编写的。本书主要分为八套模拟试卷,以对考生考前的学习进行模拟实战,达到提高考生成绩的目的。
热门推荐
  • 绝色少女闯天涯之美男别过来

    绝色少女闯天涯之美男别过来

    简介她,是凤家唯一的嫡出小姐凤雪自小就小有着东璃王国第一美女之称.可自从5岁母亲走后,便个人灵云白狠心的庶母白氏和她的女儿欺压下去,再也不受众人喜爱,父亲见了也避如蛇蝎.受尽众人欺负的她再度归来......她,是华夏中财阀王氏的掌上明珠,也是杀手帮的火凤,杀人无数的她也因为一次意外而爱上了不是同组织的猎豹李暮......是有缘还是孽缘,让本不是同一个人灵魂相吸.千年一次的异星降临,倒底是祸还是福?
  • 琴瑟之音

    琴瑟之音

    人类与魔兽的世界,相争又相扶将魔法演化到极致,或攻,或防,能治愈,亦能杀人龙啸九天,琴音合鸣的盛况,拭目以待吧
  • 决策问题管理系统开发研究

    决策问题管理系统开发研究

    本书系统评述了决策支持系统的问题管理方法及问题系统的研究现状,通过分析决策问题的普遍特征,在综合人与计算机对决策问题处理的各自优势的基础上,探讨更具智能性的决策问题管理和分析的一般方法。
  • 乾元守望

    乾元守望

    世界之大,不过于心;路途之远,莫比于梦。坚强,独立,拼搏是变强的唯一道路。
  • 吸血族裔

    吸血族裔

    他是一只东方的吸血鬼,没有出众的相貌,没有惊人的力量,也没有深厚的氏族背景,自他拥有记忆,就已经是21世纪。他努力活着,只为了不想死,是的,吸血鬼不是不死的。他是个屌丝,是个积极好学的阿Q,很二,很白痴,很傻帽,当然偶尔也会高大上一回。但其实,他很孤独,很高傲。日子如同白开水,却黑白分明,是没有半分让人感觉生机的色彩。他没有血缘家人,好像也没有完整未来,整个世界从来都好像是他一个人的,没有人进来,他也从来出不去。是的,能进入他的世界的,全是吸血鬼……
  • 盛唐剑侠传

    盛唐剑侠传

    据说,本文没有穿越,没有重生,没有空间,没有金手指据说,本文很冷门,没人看,虐人虐情虐心,还是多主角据说,本文虽然挂在起点女生网,但作者貌似是某只大叔不过,如果你喜欢传统武侠,怀念金古梁黄,可以来看看不过,如果你玩过剑网三,或许你能看到点惊喜,或惊恐不过,如果你萌女侠,女乞丐,或者干脆萌大叔,来看看特别提示,本简介非作者书,至于为什么发出来,鬼知道
  • 全民APP

    全民APP

    茫茫宇宙由无数个时空组成,每个时空都有无数的可能,当时空之间的封闭被打通,会产生什么样的化学反应?一个宅男因为一款APP而卷入了一场场“游戏”当中,为了活下去而不断前行。当他回首,发现自己已经站在世界的中心,但这一切并未结束......
  • 柳废

    柳废

    人族、魔族、神族、精灵族、矮人族、地精族、侏儒族、鳞妖族、龙族、冥族、十世界,等等等等。当这些种族汇合在一起,会产生什么样的摩擦?而异世界的游魂,又会引起怎样的轰动?【书群号:546619024,进群的小伙伴画手会免费赠送一个头像,可选择指绘or手绘。群内定期放人设,各个种族的都有,节假日皆有福利】
  • 中华民俗文化:中华民居

    中华民俗文化:中华民居

    民居的功能开始只是为人类遮风避雨而已,继而发展到居住、会客交往、家族活动、祀祖等等,除此之外,还成为显示主人身份地位的象征。
  • 重生帝子

    重生帝子

    帝子重生,誓要伐天,前世未了心愿,今生必不负卿。