plsql开发(精)

上传人:101****457 文档编号:98443648 上传时间:2019-09-11 格式:PPT 页数:52 大小:573.50KB
返回 下载 相关 举报
plsql开发(精)_第1页
第1页 / 共52页
plsql开发(精)_第2页
第2页 / 共52页
plsql开发(精)_第3页
第3页 / 共52页
plsql开发(精)_第4页
第4页 / 共52页
plsql开发(精)_第5页
第5页 / 共52页
点击查看更多>>
资源描述

《plsql开发(精)》由会员分享,可在线阅读,更多相关《plsql开发(精)(52页珍藏版)》请在金锄头文库上搜索。

1、2019/9/11,*,第八章,PL/Sql开发,2019/9/11,*,本章要点,PL/SQL基本概念 PL/SQL的变量 PL/SQL的基本语法 Oracle各种程序单元 使用游标取出多条数据 异常处理,2019/9/11,*,PL/SQL概述,什么是PL/SQL PL/SQL也是一种程序语言,被称作支持SQL的程序语言(Program Language),是Oracle数据库对SQL语句的扩展,在普通的SQL语言中增加了编程语言的特点 数据操作和查询语句被包含在PL/SQL代码的过程性单元中,经过逻辑判断、循环等操作完成复杂的功能或者计算,2019/9/11,*,PL/SQL的优点,使用

2、PL/SQL可以编写具有很多高级功能的程序,虽 然这些功能可以通过多个SQL语句来完成同样的功 能,但是PL/SQL具有如下的优点: 使一组语句功能形成模块化程序开发 使用过程性语言控制程序结构 可以对程序中的错误进行处理 具有较好的可移植性 集成在数据库中,调用更快 减少了网络的交互,有助于提高程序性能,2019/9/11,*,PL/SQL提供的新特性,PL/SQL提供了一些新的特性,可以进行复杂的信息处理 软件包 触发器 存储过程 函数 异常处理 PL/SQL可以使用所有的SQL数据操作,游标控制和事务控制命令,以及所有的SQL函数和运算符.PL/SQL完全支持SQL数据类型,2019/9

3、/11,*,SQL,SQL*PLUS,PL/SQL之间的关系,可以把oracle数据库看作餐馆的厨房,而SQL*PLUS是将菜单(脚 本,命令或程序)送进厨房(即数据库)的服务员.在厨房中有两 个厨师,SQL 和PL/SQL.作为服务员的SQL*PLUS知道它可以 处理那些命令,那些命令要交给厨师处理. 在SQL*PLUS提示符下输入的执行命令或程序就象顾客点的 菜.对于每个顾客点的菜,厨师都知道如何进行处理,就像在厨 师心中的菜谱一样,PL/SQL也存储常用命令的食谱(这些元素 称为触发器,存储函数,存储过程,软件包). 有些大菜需要多个厨师共同处理,大多数的程序都是结合了 SQL和PL/S

4、QL,并在他们之间来回的传递信息,从而处理脚本或程 序.顾客点的菜作好之后,再由作为服务员的SQL*PLUS将执行的结 果显示给用户,2019/9/11,*,PL/SQL提高了性能,Database,Database,SQL,SQL,SQL,SQL,SQL IF.THEN SQL ELSE SQL END IF; SQL,应用程序,应用程序,2019/9/11,*,PL/SQL块的基本结构,PL/SQL中起作用的部分都是由基本块组成的.基本块有四个 组成部分 声明部分:DECLARE 可选部分 变量、常量、游标、用户定义异常声明 执行体开始部分:BEGIN 必要部分 SQL语句 PL/SQL语

5、句 异常处理部分:EXCEPTION 可选部分 程序出现异常时,捕捉异常并处理异常 执行体结束:END; 必要部分,2019/9/11,*,PL/SQL块例子,DECLARE v_dept_id employees.department_id%TYPE; BEGIN SELECT department_id INTO v_dept_id FROM employees WHERE employee_id = 100; DELETE departments WHERE department_id = v_dept_id; COMMIT; EXCEPTION WHEN OTHERS THEN ROL

6、LBACK; INSERT INTO exception_table (message) VALUES (Some error occurred in the database.); COMMIT; END;,2019/9/11,*,PL/SQL环境,PL/SQL Block,PL/SQL 引擎,oracle 数据库,PL/SQL Block,Procedural Statement Executor,non-SQL,SQL,SQL Statement Executor,SQL 引擎,在数据库执行PL/SQL程序的时候,PL/SQL语句和SQL 语句被分别解析和执行的。PL/SQL块被数据库内

7、 部的PL/SQL引擎提取,将SQL语句取出送给Oralce的 SQL引擎。两种语句分别在两种引擎中分析处理,在 数据库内部完成数据交互,处理的过程,2019/9/11,*,在PL/SQL中处理变量,在声明部分声明和初始化变量 在执行部分为变量赋新值,或在表达式中使用变量 在异常处理部分也可以使用变量 通过参数把值传递到PL/SQL 块中 通过输出变量或者参数将值传出PL/SQL块,2019/9/11,*,声明变量和常量:语法,定义的标示符名称应遵循命名规则 在声明常量和变量的时候可以为其设置初始化值,也可以设置NOT NULL 可以使用赋值运算符(:=)或者DEFAULT保留字来初始化标识符

8、 在声明时,每行只能声明一个标识符,identifier CONSTANT datatype NOT NULL := | DEFAULT expr; 例如: v_total_sal NUMBER(9,2) := 0; c_tax_rate CONSTANT NUMBER(3,2) := 8.25; v_gender CHAR(1); v_valid BOOLEAN NOT NULL := TRUE;,2019/9/11,*,PL/Sql中的变量类型,简单变量 复合(组合)变量 外部变量,2019/9/11,*,简单变量,简单变量不包括任何组件,只能保存一个值 基本类型包括三大类:字符,数字,日

9、期 BINARY_INTEGER 整形数字 NUMBER (precision, scale) 数字类型 CHAR (maximum_length) 定长字符类型 VARCHAR2(maximum_length) 变长字符类型 DATE 日期类型 LONG 长字符类型 LONG RAW 长二进制类型 CLOB / BLOB / BFILE 大对象类型(字符大对象,二 进制大对象,操作系统文件大对象) BOOLEAN 布尔类型,有效值为 TRUE,FALSE,NULL,2019/9/11,*,简单变量的声明,v_gender CHAR(1); v_count BINARY_INTEGER :=

10、0; v_total_sal NUMBER(9,2) := 0; v_order_date DATE := SYSDATE + 7; c_tax_rate CONSTANT NUMBER(3,2) := 8.25; v_valid BOOLEAN NOT NULL := TRUE;,2019/9/11,*,复合数据类型,复合变量也叫做组合变量.在复合变量中包含多个内部的组件,每个组件都可以单独存放值.一个复合变量可以存放多个值 与简单变量类型不同,复合变量类型不是数据库中已经存在的数据类型,所以复合变量在声明类型之前,首先要创建使用到的复合类型,然后将变量声明为复合变量 复合数据类型: PL/

11、SQL TABLES 表类型 PL/SQL RECORDS 记录类型 复合类型被创建后,可以被使用多次定义多个变量,2019/9/11,*,复合数据类型- TABLE,表类型类似于其他编程语言中的数组类型 由两个组件组成: 数据类型为BINARY_INTEGER(整形数字)的主键 数据类型为一个确定的简单类型的列 Table类型没有长度限制,可以动态增长.表类型中的第二部分类似与数组中的值,这个部分必须是一个已经确定的简单类型,不能是其他的复合类型 表类型的结构很像数组.第一部分使一个按1递增的整形数字,起到数字索引的作用,第二部分使一种确定的简单类型,用来存放每个索引号对应的具体的数值,20

12、19/9/11,*,PL/SQL TABLE 结构,主键 列 . . 1 Jones 2 Smith 3 Maduro . . BINARY_INTEGER 标量,2019/9/11,*,声明一个PL/SQL TABLE,TYPE type_name IS TABLE OF scalar_datatype NOT NULL INDEX BY BINARY_INTEGER; identifier type_name;,. TYPE name_table_type IS TABLE OF VARCHAR2(16) INDEX BY BINARY_INTEGER; v1_name name_tabl

13、e_type; v2_name name_table_type; .,语法:,例子:,2019/9/11,*,PL/SQL RECORDS,复合类型中的RECODES类型是由多个组件组成的一种类型.包含一个或几个组件,每个组件称为一个域(FIELD),域的数据类型可以是简单变量类型、另一个RECORD类型或PL/SQL的TABLE类型 在使用RECORD变量时把多个域的集合作为一个逻辑单元使用,对记录类型变量赋值或引用,都需要使用“记录变量名.域名”的方式来实现 主要用于从表中取出查询到的行数据,2019/9/11,*,PL/SQL RECORD结构,记录类型可以包含一个或多个域,每个域相当于

14、记录类型变量的一个属性.在使用记录变量类型时,实际上是对记录类型变量的属性进行操作.每个域都可以是不同的数据类型,存放不同类型的数据,Field1 (数据类型) Field2 (数据类型) Field3 (数据类型),2019/9/11,*,声明PL/SQL RECORD,语法: TYPE type_name IS RECORD (field_name1 field_type NOT NULL :=|DEFAULT expr, field_name2 field_type NOT NULL :=|DEFAULT expr,.); identifier type_name; 例子: . TYPE

15、 emp_record_type IS RECORD (last_name VARCHAR2(25), first_name VARCHAR2(25), sal NUMBER(8) ); emp_record emp_record_type; .,2019/9/11,*,%TYPE与%ROWTYPE,除了象前面那样直接为变量声明一个确定的简单类型或者已经创建好的复合类型外,PL/SQL也支持另外的两种声明变量类型的方法,通红%TYPE和%ROWTYPE属性来声明变量类型,2019/9/11,*,%TYPE 属性,通过%TYPE属性声明一个变量,变量将遵循下面的类型声明: 一个已经声明过的变量类

16、型 一个数据库中的表的字段定义 通过%TYPE类型声明新变量的类型,实际上就是将参照的变量或表中的字段类型作为新变量的类型,新变量的类型与它所参照的类型完全相同,并且保持同步 可以作为%TYPE的前缀的可以是 数据库表和列 前面声明的变量名称 PL/SQL在运行程序时确定变量的数据类型和大小,2019/9/11,*,%TYPE属性:例子,使用%TYPE 属性的好处: 可能不知道数据库中字段的数据类型 数据库中字段的数据类型可以在运行时已被改变 和前面声明过的变量的类型保持一致,. v_last_name s_emp.last_name%TYPE; v_first_name s_emp.first_name%TYPE; v_balance NUM

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

当前位置:首页 > 中学教育 > 其它中学文档

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