[精选]Oracle数据库教程 第7章1

上传人:我**** 文档编号:183794580 上传时间:2021-06-15 格式:PPTX 页数:43 大小:274.35KB
返回 下载 相关 举报
[精选]Oracle数据库教程 第7章1_第1页
第1页 / 共43页
[精选]Oracle数据库教程 第7章1_第2页
第2页 / 共43页
[精选]Oracle数据库教程 第7章1_第3页
第3页 / 共43页
[精选]Oracle数据库教程 第7章1_第4页
第4页 / 共43页
[精选]Oracle数据库教程 第7章1_第5页
第5页 / 共43页
点击查看更多>>
资源描述

《[精选]Oracle数据库教程 第7章1》由会员分享,可在线阅读,更多相关《[精选]Oracle数据库教程 第7章1(43页珍藏版)》请在金锄头文库上搜索。

1、第7章,PL/SQL编程,PL/SQL编程,7.1 PL/SQL语言基础 7.2 PL/SQL程序结构 7.3 异常处理,7.1 PL/SQL语言基础,7.1.1 PL/SQL语言优点 PL/SQL是一种高效的事务处理语言,它具备以下优点: PL/SQL是一种高性能的基于事务处理的语言,能运行在任何Oracle环境中,支持所有数据处理命令。通过使用PL/SQL程序单元处理SQL的数据定义和数据控制元素。 PL/SQL支持所有SQL数据类型和所有SQL函数,同时支持所有Oracle对象类型。 PL/SQL块可以被命名并存储在Oracle服务器中,同时也能被其他PL/SQL程序或SQL命令调用,任

2、何客户/服务器工具都能访问PL/SQL程序,具有很好的可重用性。 可以使用Oracle数据工具管理PL/SQL程序的安全性。可以授权或撤销数据库其他用户访问PL/SQL程序权限。,7.1 PL/SQL语言基础,PL/SQL代码可以使用任何ASCII文本编辑器编写,所以对任何能够运行Oracle的操作系统都是非常便利的。 对于SQL,Oracle必须在同一时间处理每一条SQL语句,在网络环境下这就意味着每一个独立的调用都必须被Oracle服务器处理,从而占用大量的服务器时间,导致网络拥挤。而PL/SQL以整个语句块形式发给服务器,可以减少网络拥挤。,7.1 PL/SQL语言基础,7.1.2 PL

3、/SQL的基本结构 一个PL/SQL 程序包含一个或多个逻辑块,每个块都可以划分为三个部分:声明部分(用DECLARE开头)、执行部分(以 BEGIN开头)和异常处理部分(以EXCEPTION开头) 1、PL/SQL基本结构如下: DECLARE 声明部分 BEGIN 执行部分 EXCEPTION 异常处理部分 END;,7.1 PL/SQL语言基础,其中: 声明部分:定义变量和常量的数据类型和初始值,以及程序中要使用的函数、游标、异常处理名称等。如果没有需要声明的内容,可以省略这一部分。PL/SQL中要使用的所有定义都必须在这一部分进行集中定义。 执行部分:此部分是PL/SQL块中的指令部分

4、,所有的可执行语句都放在这一部分,包括对数据库的操作语句和各种流程控制语句,也可以嵌套其他的PL/SQL块。执行部分至少包含一条可执行语句。 异常处理部分:包含在执行部分中,以关键字EXCEPTION开始,到END结束。当程序检测到错误而产生异常时,就转到由EXCEPTION标识的部分执行异常处理程序。这部分是可选的,利用异常处理可以提高PL/SQL程序的健壮性。,7.1 PL/SQL语言基础,2、 PL/SQL的特殊结构, /*以名字 标识PL/SQL块*/ DECLARE 声明部分 BEGIN 执行部分 EXCEPTION 异常处理部分 END;,DECLARE 主块声明部分 BEGIN

5、主块执行部分 DECLARE 子块声明部分 BEGIN 子块执行部分 EXCEPTION 子块异常处理部分 END; EXCEPTION 主块异常处理部分 END;,带命名块的PL/SQL块,嵌套结构的PL/SQL块,7.1 PL/SQL语言基础,7.1.3 PL/SQL的字符集 1、合法字符,包括: 大写字母A-Z和小写字母a-z 数字0-9 符号 ()、+、-、*、/、=、!、;、:、.、”、#、$、_、? 制表符、空格符、回车符等非显示的间空符号 2、操作符,包括: 算术操作符 关系操作符 逻辑操作符 3、其他字符,7.1 PL/SQL语言基础,7.1.4 PL/SQL基本语法 1、常量

6、与变量的声明,语法格式如下: CONSTANT NOT NULL (宽度):= 【例7.1】几个声明的例子 声明一个长度为10B的变量 count,初值为1,类型为VARCHAR。 c varchar2(10):= 1; 声明一个NUMBER数据类型的常量c_limit,并赋予初值5000.00。 c_limit constant number(8.2):=5000.00; 声明一个NUMBER数据类型的常量c_area,并用表达式给它赋初值。 c_area constant number(8.5):=3.14159*3*2;,7.1 PL/SQL语言基础,2、作用域 变量的作用域指变量的有效

7、使用范围,它从变量声明开始,直到当前程序块结束,只有在其作用域范围内,程序才能使用该变量,否则将导致编译错误。 在同一程序块中,不允许声明两个同名变量,但在不同程序块内可以声明两个同名变量。在程序块内声明的变量称为局部变量,在程序块外声明的变量称为全局变量。引用程序块内的局部变量不需要加限定词,而引用块外的全局变量需要加限定词(即父块的名称)。子块中可以引用父块的变量,但是父块中不能引用子块的变量。如果父块与子块具有相同的变量名,在子块中引用这个变量时若是不加限定词则引用的是子块内的局部变量。若两个块不是父子关系,则他们之间的变量不能相互引用。,7.1 PL/SQL语言基础,(3)变量的属性

8、变量有名字和数据类型两个属性。变量名用于标识该变量,变量的数据类型确定了该变量存放值的格式及允许的运算。在PL/SQL中,使用“%”表示属性提示符,后面紧跟属性名。 %TYPE和%ROWTYPE是PL/SQL中两个特殊的属性,常用来定义变量,使被定义变量的数据类型与一个已定义变量(或参照表中的记录)的数据类型相一致。 %TYPE 使用%TYPE属性定义变量时,被定义变量的数据类型与一个已经定义了的变量的数据类型相一致,当被参照的变量数据类型改变后,新定义变量的数据类型也随之改变。当无法准确知道被参照变量的数据类型时,只能采用这种定义方法。定义格式为: %TYPE,7.1 PL/SQL语言基础,

9、【例7.1】声明三个变量“v_班级名称”,“v_班级人数”,“v_班主任”,其数据类型分别对应“班级表”中相应字段的数据类型。根据输入的班级代码,输出对应的班级名称、人数和班主任信息。代码如下: DECLARE v_班级名称 班级表.班级名称%TYPE; v_班级人数 班级表.班级人数%TYPE; v_班主任 班级表.班主任%TYPE; BEGIN SELECT 班级名称,班级人数,班主任 into v_班级名称,v_班级人数,v_班主任 FROM 班级表 WHERE 班级代码= 语句:Set serverout on,7.1 PL/SQL语言基础,%ROWTYPE 使用%ROWTYPE属性能

10、够定义记录变量,使得被定义的记录成员个数、名称、数据类型与已定义的表或视图中列的个数、名称和数据类型完全相同。这种定义方式,可以定义一个表,当被参照表中列及数据类型改变时,新定义表中的列及数据类型自动改变。 当一个表有较多列时,使用%ROWTYPE定义记录,比使用%TYPE要方便,并且不容易出错。定义格式为: %ROWTYPE,7.1 PL/SQL语言基础,【例7.2】声明一个变量“v_班级”,与班级表具有相同的数据类型。根据输入的班级代码,输出对应的班级名称、人数和班主任信息。代码如下: DECLARE v_班级 班级表%ROWTYPE; BEGIN SELECT * into v_班级 F

11、ROM 班级表 WHERE 班级代码=,7.1 PL/SQL语言基础,3、数据类型 标量类型 LOB型 数据类型定义的运算符,7.1 PL/SQL语言基础,【例7.3】声明一个TIMESTAMP类型的变量,并为它赋值。代码如下: SET SERVEROUT ON DECLARE checkout TIMESTAMP(2); BEGIN checkout:=10-6月-07 07.48.53.275; DBMS_OUTPUT.PUT_LINE(checkout); END;,7.2 PL/SQL程序结构,7.2.1 选择结构 选择结构又称条件控制,通过先测试一个条件,根据测试结果选择运行不同的语

12、句段。选择结构允许嵌套执行。 选择结构常用到的4种语法格式: IFTHENEND IF 结构 IFTHENELSEEND IF 结构 IFTHENELSIFEND IF 结构 CASE结构,7.2 PL/SQL程序结构,【例7.4】查找“ASP.NET程序设计”课程,若是“备注”信息为“C#”,将其改为“J#”,否则将“备注”信息置空。,7.2 PL/SQL程序结构,DECLARE v_课程 课程表%ROWTYPE; BEGIN SELECT * INTO v_课程 FROM 课程表 WHERE 课程名=ASP.NET程序设计; IF v_课程.备注=C# THEN UPDATE 课程表 SE

13、T 备注=J# WHERE 课程名=v_课程.课程名; ELSE UPDATE 课程表 SET 备注= WHERE 课程名=v_课程.课程名; END IF; DBMS_OUTPUT.PUT_LINE(更新完成! ); END; 试一试:数据被修改了吗?为什么? 作业一 、用你熟悉的方法 完成该问题 ,比较两种方法。,7.2 PL/SQL程序结构,【例7.5】学生成绩按照分数段分为“优秀”、“良好”、“合格”、“不及格”4种等级,根据等级的不同,可以输出对应的分数段,代码如下: DECLARE v_result VARCHAR2(20):=良好; BEGIN IF v_result=优秀 TH

14、EN DBMS_OUTPUT.PUT_LINE(90100); ELSIF v_result=良好 THEN DBMS_OUTPUT.PUT_LINE(8089); ELSIF v_result=合格 THEN DBMS_OUTPUT.PUT_LINE(6079); ELSIF v_result=不及格 THEN DBMS_OUTPUT.PUT_LINE(60); ELSE DBMS_OUTPUT.PUT_LINE(不存在该等级); END IF; END;,7.2 PL/SQL程序结构,【例7.6】从“成绩表”中根据学生的学号和课程号查找学生某门课程的成绩,并输出成绩的等级。采用CASE语法

15、格式:,7.2 PL/SQL程序结构,DECLARE v_score NUMBER(3); BEGIN SELECT 成绩 into v_score FROM 成绩表 WHERE 学号=,7.2 PL/SQL程序结构,【例7.7】使用CASE语句完成例7.5程序。要求使用CASE语句第二种语法格式实现,代码如下: DECLARE v_result VARCHAR2(20):= 良好; BEGIN CASE v_result WHEN 优秀 THEN DBMS_OUTPUT.PUT_LINE(90100); WHEN 良好 THEN DBMS_OUTPUT.PUT_LINE(8089); WHE

16、N 合格 THEN DBMS_OUTPUT.PUT_LINE(6079); WHEN 不及格 THEN DBMS_OUTPUT.PUT_LINE(60); ELSE DBMS_OUTPUT.PUT_LINE(不存在该等级); END CASE; END;,7.2 PL/SQL程序结构,7.2.2 循环结构 循环结构可以对一段语句反复执行,直到满足某一条 件,跳出循环 。 循环结构常用到的3种语法格式: LOOPEND LOOP结构 WHILELOOPEND LOOP 结构 FORLOOPEND LOOP 结构,7.2 PL/SQL程序结构,【例7.8】利用LOOP循环和EXIT语句计算1至100的自然数之和。代码如下: DECLARE v_i NUMBER:=1; v_s NUMBER:=0; BEGIN LOOP EXIT WHEN v_i100; v_s:=v_s+v_i; v_i:=v_i+1; END LOOP; DBMS_OUTPUT.PUT_LINE(1100自然数之和: |v_s); END;,7.2 PL/SQL程序结构,【例7.9】利用WHILE循环计算1至100的自

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 办公文档 > PPT模板库 > PPT素材/模板

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号