430 likes | 616 Views
《ORACLE》. 学习情境 11 PLSQL 语言( 8 学时). 计算机技术与软件工程学院 胡斌. PL/SQL. PL/SQL 是具有控制语句的数据查询语句,编写的脚本文件中的程序称为存储过程,被 ORACLE 调用。 1.PL/SQL 简述 7.% TYPE 2. 结构 8.游标 3. 编程基础 9.集合 4. 访问数据库 10.异常 5. 过程和函数 11.程序类型 6. 记录类型 12.触发器. 1. 简述. PL/SQL 代表 Procedural Language/SQL(Procedural Language: 过程语言)
E N D
《ORACLE》 学习情境11 PLSQL语言(8学时) 计算机技术与软件工程学院 胡斌
PL/SQL • PL/SQL是具有控制语句的数据查询语句,编写的脚本文件中的程序称为存储过程,被ORACLE调用。 • 1.PL/SQL简述7.%TYPE • 2.结构8.游标 • 3.编程基础9.集合 • 4.访问数据库10.异常 • 5.过程和函数11.程序类型 • 6.记录类型12.触发器
1.简述 • PL/SQL 代表 Procedural Language/SQL(Procedural Language:过程语言) • 它是对 SQL 的扩展 • PL/SQL 中存在过程构造和数据库访问 • 在 Oracle 服务器和客户机应用程序中使用 • 支持大型对象和集合
1.简述 • 字符集:英文字母,数字,符号。 • 运算符:表3-1,表3-2。 • PL/SQL代表面向过程化的语言与SQL语言的结合,在编写PL/SQL代码时可以在SQL语句中使用: • (1)变量和类型 • (2)控制语句 • (3)过程和函数 • (4)对象类型和方法
1.简述 • 支持对象类型和集合 • 调用外部函数和过程 • 支持 SQL • 支持 OOP • 更高生产率 • 更佳性能 • 可移植性 • 与 Oracle 集成在一起 • 严密的安全性
ORACLE 服务器 主程序或 ORACLE 工具 PL/SQL 引擎 过程语句执行器 匿名 PL/SQL 块 匿名 PL/SQL 块 过程语句 SQL语句 SQL 语句执行器 2.结构
2.结构 • PL/SQL 引擎是主要组件,它驻留在 Oracle 服务器中 • PL/SQL 引擎 • 处理 PL/SQL 块并将其分离为 SQL 语句及过程语句 • 将过程语句发送到过程语句执行器以进行处理 • 将 SQL 语句发送到 SQL 语句执行器以进行处理
2.结构 • PL/SQL语言实现了将过程结构与Oracle SQL的无缝集成 • 例:修改一个学生的专业,如果没有该学生,就插入一个新的记录 • PL/SQL程序都是以块(block)为基本单位。 DECLARE 变量、常量、游标、自定义异常 BEGIN SQL语句 PL/SQL控制语句 EXCEPTION 错误发生时执行的动作 END;
2.结构 • Declaration,声明部分定义变量等,至begin结束,为可选部分。 • Body,程序体包含具体查询语句,由begin至exception或end结束,为必须部分。 • Exception,异常处理针对某个语句出错时的处理语句,为可选语句。 • 注释为/*……*/,或者--。
2.结构 • 它包括一组语句 • PL/SQL 程序中的基本单元 • 将相关的声明和语句进行逻辑分组 • 声明对于块是局部的 • 在块完成之后,将超出范围
2.结构 • PL/SQL 的各个组成部分 • 声明部分 • 可执行部分 • 异常处理部分 • PL/SQL 块的结构 • DECLARE • declarations • BEGIN • executable statements • EXCEPTION • handlers • END; • 其中,declarations是声明,executablestatements是可执行语句,handlers是处理程序。
数据类型 • 内置数据类型 • 标量 • 复合 • 引用 • LOB
数据类型 • 标量 • 容纳单个值 • 没有内部组成 • 分为四个类别: • NUMBER • CHARACTER • DATE • BOOLEAN
数据类型 • Number 类型 • 用于存储和操纵数字数据 • Number 类型是: • BINARY_INTEGER • NUMBER • 子类型是DEC、DECIMAL、DOUBLE PRECISION、FLOAT、INTEGER、INT、NUMERIC、REAL、SMALLINT • PLS_INTEGER
数据类型 • Character 类型 • CHAR • VARCHAR2 • RAW • LONG 和 LONG RAW • ROWID 和 UROWID • 区域字符类型 • NCHAR • NVARCHAR2
数据类型 • Datetime 和 Interval 类型 • DATE • TIMESTAMP • TIMESTAMP WITH TIME ZONE • TIMESTAMP WITH LOCAL TIME ZONE • INTERVAL YEAR TO MONTH • INTERVAL DAY TO SECOND
数据类型 • BOOLEAN 类型 • 用于存储逻辑值(TRUE、FALSE 和 NULL) • 不接受任何参数 • 不能向数据库中插入 BOOLEAN 数据 • 不能将列值提取或选择到 BOOLEAN 变量中 • 只允许对 BOOLEAN 变量执行逻辑操作
数据类型 • 组合类型 • RECORD • VARRAY • NESTED TABLE • LOB 类型 • BLOB • CLOB • NCLOB • BFILE
数据类型 • 属性 • 引用数据库中的数据类型和对象 • PL/SQL 变量和常量可以具有属性 • 属性的类型 • %type–引用数据库列 • %rowtype–代表表中的行
3.编程基础-变量 • 在大多数PL/SQL块中,都需要使用变量来包含在程序逻辑中使用的值。无论需要什么类型的变量,能够在BEGIN部分中使用它之前,都必须在块的DECLARE段中声明这些变量。 • 声明变量必须提供变量名称和数据类型。 • 变量名称遵循以下约定: 以一个字母字符开头,最多包含30个字符,不能有空格和关键字,可以包含大写和小写字母、数字以及_、$、#及其它特殊字符 • 表3-3,数据类型
变量 • 数据的临时存储 • 在声明部分中声明 • 可以在 SQL 语句和过程语句中使用 • 在可执行部分中赋予新值 • 使用变量的优点 • 可重用性 • 易于维护
变量 • 结束符号“/”。 • 设置SERVEROUTPUT参数,DBMS_OUTPUT.PUT_LINE是输出语句。 • 变量声明时,每行只能声明一个变量。 • 赋值使用“:=”
3.编程基础-控制结构 • If语句的五个规则。注意“;”的使用。 • Case语句的关键字,表达式和语句用法。 • Loop循环的四种形式。 • For循环。
控制结构 • 控制流语句 • 条件控制 • 迭代控制 • 顺序控制 • 条件控制 • 基于条件执行语句 • 类型:if then、if then else、if then elsif 和 CASE 语句
控制结构 • 迭代控制 • 简单循环 • WHILE 循环 • FOR 循环 • 顺序控制 • GOTO 语句 • NULL 语句
逻辑比较 • PL/SQL 支持 SQL 和 PL/SQL 中变量和常量的比较(称为“布尔表达式”) • 布尔表达式的类型有: • 数值型 • 字符型 • 日期型
逻辑比较 • 数值型布尔表达式 • 比较数值 • 下表说明这一点:
运算符 含义 示例 = 等于 name = ‘MARK’ != 不等于 product != ‘computer’ < 按字母顺序排在其前 name1 < name2 > 按字母顺序排在其后 name1 > name2 <= 按字母顺序排在其前或等于 name2 <= name3 >= 按字母顺序排在其后或等于 name3 >= name4 逻辑比较 • 字符型布尔表达式 • 比较用引号括起来的序列或单个字符 • 下表说明这一点:
运算符 含义 示例 = 等于 Odate = ‘12-Jan-74’ != 不等于 Odate != ’14 – Feb - 88’ < 早于 Odate < ’19 – Jun - 88’ > 晚于 Odate > ’30 – jun - 77’ <= 早于或等于 next_day(odate, 6)<= ‘1-Jan-97’ >= 晚于或等于 odate >= ‘25-DEC-67’ 逻辑比较 • 日期型布尔表达式 • 比较两个日期 • 下表说明这一点:
4.访问数据库 • 不能使用create等更改数据库结构的sql语句,只能操作数据。 • 程序块中可以加入SQL语句! • 变量进行赋值,select…into…为变量赋值。 • 表的引用
5.过程和函数 • 过程(procedure)是执行某个操作的子程序; • 函数(function)是求值并返回到调用的程序。 • 参数:in,out,inout。位置表示法和命名表示法(可以不按顺序)。有默认值的可以省略。 • 函数需要定义返回值类型,需要return语句返回结果。
6.记录类型-用户自定义类型 • 记录类型是表的镜像,类似结构体。 • 记录变量的单个字段用点表示法。 • 记录变量可以作为参数。 • 参与表达式,组成SQL语句。
7.%TYPE • %TYPE引用表的字段类型,自动处理字段数据类型。 • %ROWTYPE引用整个表的所有字段。
8.游标(cursor) • 游标是一个sql语句的工作区。有隐式和显式游标。适合处理多行结果查询。 • 声明和使用游标。 • 游标for循环的简化用法。 • 游标可以有参数,对查询结果进行限定。 • 处理游标结果的当前行。
9.集合(collection) • 嵌套表类型。 • 集合方法。紧凑和稀疏的概念。 • 可变数组。
10.异常处理 • 预定义异常表3-6 • 用户自定义异常。 • 用RAISE引发用户定义的异常。 • RAISE_APPLICATION_ERROR返回错误号。 • WHEN OTHERS处理没有指定的异常。 • SQLCODE SQLERRM返回错误号和消息。
错误处理 • PL/SQL 中的错误条件称为异常 • 有两种类型的异常: • 预定义的 • 用户定义的 • 当在 PL/SQL 程序中出现错误时,将引发异常 • 在出现错误时,正常执行将停止,控制权转移到异常处理部分
错误处理 • 预定义的异常 • PL/SQL 程序违反 Oracle 规则时,将隐式引发它 • 用户定义的异常 • 由 raise 语句显式引发 • 只能在 PL/SQL 块的声明部分中声明
11.程序类型 • 匿名块 • 过程和函数以命名的模式对象存储就是存储过程。
12.触发器 • 当数据库中发生某些特定事件时,会自动执行的过程,没有参数。
总结 • PL/SQL 代表 procedural language/SQL(procedural language:过程语言) • PL/SQL 是一种块结构的语言 • 将 SQL 的数据操纵功能与过程语言的数据处理功能结合在一起 • 允许我们使用所有 SQL DML、TCL、SQL 函数和运算符 • PL/SQL 引擎执行 PL/SQL 块 • PL/SQL 支持所有 SQL 数据类型和 ANSI 标准类型
总结 • PL/SQL 块的三个组成部分是:声明部分、可执行部分和异常处理部分 • 变量和常量是在声明部分中声明的 • LOB 类型用于存储大型对象 • 属性用于引用数据库中的数据类型和对象 • 支持对变量和常量进行比较 • 布尔表达式的三种类型是 - 数值型、字符型和日期型
总结 • 控制结构的三种类型是 - 条件控制、迭代控制、顺序控制 • IF 语句的三种形式是 -IF THEN、IF THEN ELSE、IF THEN ELSIF • LOOP 可用于多次执行语句 • GOTO 语句用于无条件地转移到一个标签位置 • PL/SQL 中的错误条件称为异常