《Oracle数据库实用教程(第二版)》-唐远新-电子教案(含源代码) 第09章 PLSQL

上传人:E**** 文档编号:89428784 上传时间:2019-05-25 格式:PPT 页数:103 大小:572KB
返回 下载 相关 举报
《Oracle数据库实用教程(第二版)》-唐远新-电子教案(含源代码) 第09章  PLSQL_第1页
第1页 / 共103页
《Oracle数据库实用教程(第二版)》-唐远新-电子教案(含源代码) 第09章  PLSQL_第2页
第2页 / 共103页
《Oracle数据库实用教程(第二版)》-唐远新-电子教案(含源代码) 第09章  PLSQL_第3页
第3页 / 共103页
《Oracle数据库实用教程(第二版)》-唐远新-电子教案(含源代码) 第09章  PLSQL_第4页
第4页 / 共103页
《Oracle数据库实用教程(第二版)》-唐远新-电子教案(含源代码) 第09章  PLSQL_第5页
第5页 / 共103页
点击查看更多>>
资源描述

《《Oracle数据库实用教程(第二版)》-唐远新-电子教案(含源代码) 第09章 PLSQL》由会员分享,可在线阅读,更多相关《《Oracle数据库实用教程(第二版)》-唐远新-电子教案(含源代码) 第09章 PLSQL(103页珍藏版)》请在金锄头文库上搜索。

1、Oracle数据库实用教程 (第二版),唐远新 曲卫平 李晓峰等编著 中国水利水电出版社 2009.6,第9章 PL/SQL,PL/SQL为Oracle数据库提供的过程化编程语言 PL/SQL可用于分组SQL语句,将它们一起发向服务器,减少网络传输,提高程序运行效率 PL/SQL具有良好的可移植性,可运行于任何有Oracle Server的地方。 PL/SQL提供了完善的程序控制结构,可以实现复杂、功能强大的应用程序 PL/SQL集成于Oracle Server与Oracle 应用开发工具之中,可方便地实现分布式计算,9.1 PL/SQL基础,一段完整的PL/SQL程序块结构 DECLARE

2、说明部分; BEGIN 执行部分; EXCEPTION 例外处理部分; END;,1.PL/SQL程序块的结构,说明部分是可选的 PL/SQL中标识符遵循先定义后使用的原则,PL/SQL的每一条语句都必须以分号“;”结束 在执行部分不能使用DDL语句和DCL语句,例外处理部分是可选的,当执行部分发生一个错误时,将会引起一个例外 例外发生后,正常的执行被停止并且转移到例外程序处理 例外处理完成后,将结束对应PL/SQL块的执行,1.PL/SQL程序块的结构,注释 /* 注释文本 */ - 注释文本,可以没有说明和例外处理部分,只剩中间的代码 NULL语句属于可执行语句,在SQL*Plus中PL/

3、SQL程序执行完成时总是返回提示“PL/SQL 过程已成功完成”,PL/SQL程序块可以嵌套,PL/SQL中标识符以字母开头,后面可以是字母、数字、$、下划线和#,2.PL/SQL基本语法规则,标识符最长不超过30个字符,PL/SQL运算符 逻辑运算:AND、OR、NOT 算术运算:+、-、*、/、*(幂) 关系运算:=、!=、=、=、LIKE、 BETWEEN x AND y、IS NULL 集合运算:IN(属于) 字符串运算:+、-、|(连接),标识符的作用范围:视具体情况而定 程序块、子程序、包等,IN运算要求集合元素用圆括号括起来 x in (男,女),2.PL/SQL基本语法规则,判

4、断某个列或表达式的值是否为空(NULL) ,应使用IS NULL运算符,LIKE:匹配运算 _代表任意一个字符(必须有一个字符) %代表任意多个字符(可为0个字符) 匹配字符可以多次使用,可以组合使用,转义描述符:还原匹配字符的通常含义,用ESCAPE定义 job LIKE %SA_% ESCAPE ,空值NULL与任何其他数据运算的结果仍为空,PL/SQL中运算符的优先级,2.PL/SQL基本语法规则,在PL/SQL程序中使用的变量 PL/SQL变量 非PL/SQL变量,2.PL/SQL基本语法规则,PL/SQL变量类型 (1) 标量数据类型(Scalar) :存放一个值 (2) 复合类型(

5、Composite) :包含多个项的值 包括TABLE、RECORD、NESTED TABLE和VARRAY等类型 (3) 参照类型(Reference) :为参照表类型,在一个基表的记录中存放被参照表中记录的指针 (4) 大对象类型(LOB) :被称为定位器(Locators) ,存放指向数据的指针,包括CLOB、BLOB、NCLOB和BFILE等类型,部分常用 PL/SQL标量数据类型,2.PL/SQL基本语法规则,PL/SQL中的变量和常量必须先定义然后才能使用,2.PL/SQL基本语法规则,赋值语句语法 变量名:= PL/SQL表达式;,例9.1 PL/SQL变量定义与赋值。 EXA_

6、09_01.SQL,PL/SQL没有输入和输出能力,需借助 DBMS_OUTPUT包 非PL/SQL变量,2.PL/SQL基本语法规则,非PL/SQL变量包括两种类型 替换变量:使用&前缀引用替换变量获取输入数据 主机变量或绑定变量:将运算结果返回到主机环境,替换变量 替换变量没有类型,只是一个代码替换操作 替换变量可不事先定义就直接使用 在SQL*Plus中使用DEFINE定义替换变量 环境变量VERIFY用于设定是否显示替换后的语句行,绑定变量 使用VARIABLE定义 使用PRINT语句输出绑定变量的值 在PL/SQL块中使用绑定变量方法 :绑定变量名,2.PL/SQL基本语法规则,例9

7、.2 使用替换变量和绑定变量。 EXA_09_02.SQL,允许服务器输出PL/SQL程序运行结果 SET serveroutput ON,标识符命名规范,2.PL/SQL基本语法规则,标号 用于标识一个程序块,形为 ,2.PL/SQL基本语法规则, DECLARE v_deptname VARCHAR2(30); BEGIN DECLARE v_deptname VARCHAR2(30); BEGIN outer.v_deptname := RESEARCH; END ; END;,外层嵌套程序块中同名标识符的引用 外层块标号.变量名,出错报告函数 (用于PL/SQL块的例外处理部分) SQ

8、LCODE:返回最近例外的错误码 SQLERRM:返回与SQLCODE返回错误码相对应的错误信息 不可以在SQL语句中直接使用这两个函数 先用变量接收它们的返回值 通过变量来使用它们的值 一般情况下,应该建立一个错误信息日志表,记载在系统运行中发生的错误信息,2.PL/SQL基本语法规则,出错报告函数使用示例,2.PL/SQL基本语法规则,DECLARE v_code NUMBER; v_msg VARCHAR2(255); BEGIN EXCEPTION WHEN OTHERS THEN ROLLBACK; v_code := SQLCODE ; v_msg := SQLERRM ; INS

9、ERT INTO error_msg VALUES(SYSTIMESTAMP,v_code, v_msg); END;,PL/SQL编程指导原则 (1) 使用注释文档化代码 (2) 遵循代码字符大小写规范 (3) 遵循命名规范 (4) 使用缩进增强程序的可读性 (5) 适当换行,分行书写语句,2.PL/SQL基本语法规则,%TYPE类型描述符 简化变量的定义 自动保持某些变量在数据类型上的一致性 减少程序维护工作 使用如下形式定义变量 表名.列名%TYPE 已定义的变量或常量名%TYPE 取数据表中某列的类型或已定义的某些数据对象的类型作为新常量或变量的类型,3.复合数据类型,例9.3 使用%

10、TYPE定义变量。 EXA_09_03.SQL,记录类型 记录类型用于表示逻辑相关的一组信息,3.复合数据类型,例9.4 定义与使用RECORD类型。 EXA_09_04.SQL,定义记录类型的语法 TYPE record_type_name IS RECORD( field1 data_type, field2 data_type, );,引用记录类型变量的域 记录变量名.域名,%ROWTYPE (1) 新记录变量名 已定义的记录类型变量%ROWTYPE (2) 新记录变量名 表名%ROWTYPE,TABLE类型 也称为索引表,表中元素属于同一种类型 表中元素个数没有限制 表类型定义语法 T

11、YPE table_type_name IS TABLE OF 基类型 INDEX BY BINARY_INTEGER; 用下标区分表类型变量中的每一个元素 表类型变量(下标),3.复合数据类型,例9.5 定义与使用TABLE类型。 EXA_09_05.SQL,例9.6 定义与使用结构体表类型。 EXA_09_06.SQL,例9.7 定义与使用多维表类型。 EXA_09_07.SQL,数组类型(VARRAY) VARRAY中的元素个数是有限制的 下标不能取负数,从1开始 定义VARRAY类型语法 TYPE varray_type_name IS VARRAY(元素个数) OF 基类型; 访问V

12、ARRAY类型数组变量的元素 varray类型变量(下标),3.复合数据类型,例9.8 定义与使用VARRAY类型。 EXA_09_08.SQL,集合(Collection) TABLE类型 NESTED TABLE类型 VARRAY类型,3.复合数据类型,COUNT DELETE DELETE(n) DELETE(m,n) EXIST(x) EXTEND EXTEND(n) EXTEND(n,x) FIRST LAST LIMIT NEXT(n) PRIOR(n) TRIM TRIM(n),注意! 不是每种类型都可用所有方法,PL/SQL程序的几种形式 (1) 无名块 (2) 存储过程/函数

13、 (3) 包 (4) 数据库触发器 (5) Oracle Forms Builder等开发工具中的过程/函数 (6) Oracle Forms Builder等开发工具中的触发器,4.PL/SQL程序的用途,从数据库中查询/提取出数据,并赋值给相关变量 SELECT INTO语法 SELECT DISTINCT | ALL * | select_item , select_item. INTO variable_name , variable_name.| record_name FROM table_reference | THE (subquery) alias , table_refer

14、ence | THE (subquery) alias. rest_of_statement rest_of_statement.; SELECT INTO语句应仅返回一条记录,否则引起系统预定义的例外TOO_MANY_ROWS,9.2 PL/SQL中的SELECT语句,例9.9 使用SELECT INTO 语句从DEPT表中取出数据。 EXA_09_09.SQL,例9.10 有错误但进行了例外处理的SELECT INTO语句。EXA_09_10.SQL,例9.11 有错误但对每个SELECT INTO例外都处理了的SELECT INTO语句。 EXA_09_11.SQL,分支语句IF,9.3

15、 流程控制语句,例9.12 使用IF语句与CASE语句。 EXA_09_12.SQL,IF 条件 THEN 语句序列; END IF;,IF 条件 THEN 语句序列1; ELSE 语句序列2; END IF;,IF 条件l THEN 语句序列1; ELSIF 条件2 THEN 语句序列2; ELSE 语句序列3; END IF;,分支语句CASE,CASE 表达式 WHEN 常量1 THEN 语句1; ELSE 常量x THEN 语句x; END CASE;,循环控制语句,基本循环语句 LOOP 语句序列; EXIT WHEN 布尔表达式; END LOOP;,数值FOR循环语句 FOR 计

16、数器变量 IN REVERSE 下界上界 LOOP 语句序列; END LOOP;,WHILE循环语句 WHILE 条件 LOOP 语句序列; END LOOP;,游标FOR循环语句,EXIT语句用于退出当前循环,跳转控制语句,例9.13 使用循环语句与跳转语句。 EXA_09_13.SQL,IF condition THEN EXIT; END IF;,EXIT WHEN condition ;,GOTO语句用于无条件地转向一个有标号的语句或一个PL/SQL块,NULL语句不作任何操作,只是将控制转移到下一条语句,游标是为处理SQL语句而分配的一个私有SQL工作区,用于管理SQL语句返回的记录 Oracle服务器用游标来命名每一个SQL工作区 游标分为两类 隐式游标对应于DML语句和SELECT语句的执行空间和相应的信息,系统自动将此类游标命名为SQL 显式游标由程序员定义和维护,名称由程序员确定 显式游标一般用于需要对多条记录按顺序一条一条进

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 高等教育 > 大学课件

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