第五章 使用 PL/SQL.

Slides:



Advertisements
Similar presentations
Oracle. 数据操纵语言  数据操纵语言用于检索、插入和修改数据  数据操纵语言是最常见的 SQL 命令  数据操纵语言命令包括:  SELECT  INSERT  UPDATE  DELETE.
Advertisements

第二章 简单的 SQL 语句. 本章要点  创建一个简单的表  SQL 语句介绍  最简单的查询语句 select  带有限制条件的查询  查询结果的排序显示.
作業一 : USING DBMS ( 使用 DB2 及 SQL 基本練習 ) 報告人:學生楊群期 學號: 課程 : 高等資料庫 講師 : 楊維邦教授.
Data type P64 ‘’ 转义字符 P67 P68 EXE,选出某个教师的学生中最新的一 个,要姓名, ID (,LIMIT ) EXISTS,NOT EXISTS P409 Q,EXISTS 和 in 的区别( 1000 ,查询结果)
ORACL深入浅出 主讲人:邹振兴 深入浅出Oracle 主讲:邹振兴.
5.1 掌握Power Scrip语言 5.2 使用控件 实训五 控件应用
SQL的简单查询.
第四章 数据库对象.
Tool Command Language --11级ACM班 金天行.
第14章 預存程序 14-1 預存程序的基礎 14-2 建立與執行預存程序 14-3 預存程序的參數傳遞 14-4 預存程序的傳回值
数据库概述 简而言之,数据库(DataBase)就是一个存储数据的仓库。为了方便数据的存储和管理,它将数据按照特定的规律存储在磁盘上。通过数据库管理系统,可以有效的组织和管理存储在数据库中的数据。如今,已经存在了Oracle、SQL Server、MySQL等诸多优秀的数据库。在这一章中将讲解的内容包括。
第三章 数据类型和数据操作 对海量数据进行有效的处理、存储和管理 3.1 数据类型 数据源 数据量 数据结构
Oracle数据库 Oracle 子程序.
PL/SQL程序设计 过程, 函数 Trigger 对象关系数据库技术.
主机DB2数据库应用与编程 任课老师:王湖南 四川大学计算机(软件)学院.
Oracle数据库入门.
数据库技术 第十章 数据库完整性 中国科学技术大学网络学院 阚卫华.
第四章:触发器   触发器类似于过程、函数,因为它们都是拥有说明部分、语句执行部分和异常处理部分的有名的PL/SQL块。与包类似,触发器必须存储在数据库中,并且不能被块进行本地化说明。但是,对于过程而言,可以从另一个块中通过过程调用显式地执行一个过程,同时在调用时可以传递参数。对于触发器而言,当触发事件发生时就会显式地执行该触发器,并且触发器不接受参数。
EBNF与操作语义 请用扩展的 BNF 描述 javascript语言里语句的结构;并用操作语义的方法描述对应的语义规则
ORACLE 第五讲 PL/SQL编程基础.
Hadoop I/O By ShiChaojie.
第7章:文件共享 与远程控制——回顾 第8章:bash脚本编程 本章教学目标: 了解shell程序的基本结构 网络文件系统NFS的概念
EBNF 请用扩展的 BNF 描述 C语言里语句的结构; 请用扩展的 BNF 描述 C++语言里类声明的结构;
第三章:包   包(package)是一个可以将相关对象存储在一起的PL/SQL结构。包包含了两个分离的部件------包说明(specification)和包主体(body)。每个部件都单独被存储在数据字典中。包只能存储在数据库中,不能是本地的。除了可以将相关对象作为一组存在一起以外,包也是十分有用的,因为它们在依赖性方面的限制是比较小的。也有许多性能上的优点。
管理信息结构SMI.
SQL Injection.
走进编程 程序的顺序结构(二).
实验4:PL-SQL编程 1.实验目的 2.实验原理 PL/SQL是一种过程化语言,属于第三代语言,本实验在与熟悉使用PL/SQL编程.
第一单元 初识C程序与C程序开发平台搭建 ---观其大略
数据库基础 1.
第十章 IDL访问数据库 10.1 数据库与数据库访问 1、数据库 数据库中数据的组织由低到高分为四级:字段、记录、表、数据库四种。
iRepor报表设计基础 IReport安装 普通实体报表 数据结果集报表 工作流主从报表 饼状图报表 柱状图,曲线图报表 条形码报表
第二章 Java语言基础.
数据库应用技术 SQL Server 2005.
用event class 从input的root文件中,由DmpDataBuffer::ReadObject读取数据的问题
第四章 PL/SQL控制结构 If-then:如果条件为true,则执行一行或多行代码,如果条件为假,转到end if之后。
ORACLE 第九讲 触发器.
第4章 PHP流程控制语句.
1.3 C语言的语句和关键字 一、C语言的语句 与其它高级语言一样,C语言也是利用函数体中的可执行 语句,向计算机系统发出操作命令。按照语句功能或构成的不 同,可将C语言的语句分为五类。 goto, return.
C语言程序设计 主讲教师:陆幼利.
$9 泛型基础.
4.2 视图 (1) 视图是一个虚拟表,其内容来自对表查询的基础上。
CS, ZJU 4/18/2019 Chapter 7 数据库.
3.2 Mysql 命令行 1 查看数据库 SHOW DATABASES; 2 创建一个数据库test1 CREATE DATABASE test1; 3 选择你所创建的数据库 USE test1; (按回车键出现Database changed 时说明操作成功!) 4 查看现在的数据库中存在什么表.
SQL 范引娣.
VB与Access数据库的连接.
第三章 SQL Server数据管理.
<编程达人入门课程> 本节内容 内存的使用 视频提供:昆山爱达人信息技术有限公司 官网地址: 联系QQ: QQ交流群: ,
C语言程序设计 第一章 数据类型, 运算符与表达式 第二章 顺序程序设计 第三章 选择结构程序设计 第四章 循环控制 第五章 数组.
成绩是怎么算出来的? 16级第一学期半期考试成绩 班级 姓名 语文 数学 英语 政治 历史 地理 物理 化学 生物 总分 1 张三1 115
PL/SQL程序设计.
第4章 Excel电子表格制作软件 4.4 函数(一).
Oracle Database 10g基础教程 清华大学出版社
第九节 赋值运算符和赋值表达式.
3.16 枚举算法及其程序实现 ——数组的作用.
多层循环 Private Sub Command1_Click() Dim i As Integer, j As Integer
ASP.NET实用教程 清华大学出版社 第4章 C#编程语言 教学目标 教学重点 教学过程 2019年5月5日.
Visual Basic程序设计 第13章 访问数据库
学习目标 1、了解基本运算符 2、运算符优先级.
第六章 类属B树索引技术 对基于树的索引方法给出一种通用算法。该算法是建立在类属B树的概念之上开发的。它将类型系统开放,使系统能支持用户自定义的数据类型、函数和某些特殊的查询谓词的集合。并且,将新的数据类型、函数、查询谓词等登记到数据库管理系统中,
GIS基本功能 数据存储 与管理 数据采集 数据处理 与编辑 空间查询 空间查询 GIS能做什么? 与分析 叠加分析 缓冲区分析 网络分析
基于列存储的RDF数据管理 朱敏
C++语言程序设计 C++语言程序设计 第一章 C++语言概述 第十一组 C++语言程序设计.
C++语言程序设计 C++语言程序设计 第九章 类的特殊成员 第十一组 C++语言程序设计.
VB与Access数据库的连接.
数据表示 第 2 讲.
WEB程序设计技术 数据库操作.
顺序结构程序设计 ——关于“字符串”和数值.
编译原理实践 6.程序设计语言PL/0.
学习目标 1、什么是列类型 2、列类型之数值类型.
Presentation transcript:

第五章 使用 PL/SQL

回顾 同义词是现有数据库对象的别名 序列用于生成唯一、连续的序号 视图是基于一个或多个表的虚拟表 索引是与表相关的一个可选结构,用于提高 SQL 语句执行的性能 索引类型有标准索引、唯一索引、反向键索引、位图索引和基于函数的索引 索引组织表基于主键访问数据

目标 理解 PL/SQL 功能和特点 了解数据类型及其用法 理解逻辑比较 理解控制结构 掌握错误处理

PL/SQL 简介 PL/SQL 是过程语言(Procedural Language)与结构化查询语言(SQL)结合而成的编程语言 PL/SQL 是对 SQL 的扩展 支持多种数据类型,如大对象和集合类型,可使用条件和循环等控制结构 可用于创建存储过程、触发器和程序包,给SQL语句的执行添加程序逻辑 与 Oracle 服务器和 Oracle 工具紧密集成,具备可移植性、灵活性和安全性

PL/SQL 的优点 2-1 支持 SQL,在 PL/SQL 中可以使用: 支持面向对象编程 (OOP) 数据操纵命令 事务控制命令 游标控制 SQL 函数和 SQL 运算符 支持面向对象编程 (OOP) 可移植性,可运行在任何操作系统和平台上的Oralce 数据库 更佳的性能,PL/SQL 经过编译执行 Procedure Begin ProcedureCall SQL Command … End Oracle 用户将整个语句块发送给 Oracle

PL/SQL 的优点 2-2 与 SQL 紧密集成,简化数据处理。 安全性,可以通过存储过程限制用户对数据的访问 支持所有 SQL 数据类型 支持 NULL 值 支持 %TYPE 和 %ROWTYPE 属性类型 PL/SQL SQL 安全性,可以通过存储过程限制用户对数据的访问

PL/SQL 的体系结构 PL/SQL 引擎驻留在 Oracle 服务器中 该引擎接受 PL/SQL 块并对其进行编译执行 用户 过程语句 执行器 将PL/SQL 块发送给 Oracle 服务器 将结果发送给用户 执行过程语句 用户 引擎将 SQL 语句发送给SQL 语句执行器 执行 SQL 语句

包含 SQL 和 PL/SQL 语句的可执行部分 PL/SQL 块是构成 PL/SQL 程序的基本单元 将逻辑上相关的声明和语句组合在一起 PL/SQL 分为三个部分,声明部分、可执行部分和异常处理部分 [DECLARE declarations] BEGIN executable statements [EXCEPTION handlers] END; DECLARE qty_on_hand NUMBER(5); BEGIN SELECT quantity INTO qty_on_hand FROM Products WHERE product = '芭比娃娃' FOR UPDATE OF quantity; IF qty_on_hand > 0 THEN UPDATE Products SET quantity = quantity + 1 WHERE product = '芭比娃娃'; INSERT INTO purchase_record VALUES ('已购买芭比娃娃', SYSDATE); END IF; COMMIT; EXCEPTION /* 异常处理语句 */ WHEN OTHERS THEN DBMS_OUTPUT.PUT_LINE('出错:'|| SQLERRM); END; 声明部分定义变量、游标和自定义异常 包含 SQL 和 PL/SQL 语句的可执行部分 指定出现错误时需要执行的操作

变量和常量 1-2 PL/SQL 块中可以使用变量和常量 声明变量和常量的语法: 给变量赋值有两种方法: 在声明部分声明,使用前必须先声明 声明时必须指定数据类型,每行声明一个标识符 在可执行部分的 SQL 语句和过程语句中使用 声明变量和常量的语法: identifier [CONSTANT] datatype [NOT NULL] [:= | DEFAULT expr]; 给变量赋值有两种方法: 使用赋值语句 := 使用 SELECT INTO 语句

变量和常量 2-2 DECLARE icode VARCHAR2(6); p_catg VARCHAR2(20); p_rate NUMBER; c_rate CONSTANT NUMBER := 0.10; BEGIN ... icode := 'i205'; SELECT p_category, itemrate * c_rate INTO p_catg, p_rate FROM itemfile WHERE itemcode = icode; END;

数据类型 PL/SQL 支持的内置数据类型 数据类型 标量类型 LOB类型 属性类型 数字 存储非结构化数据块 BFILE 字符 BLOB %TYPE %ROWTYPE 布尔型 CLOB 提供某个变量或数据库表列的数据类型 提供表示表中一行的记录类型 日期时间 NCLOB

数字数据类型 指定数值的存储格式 数字数据类型 BINARY_INTEGER NUMBER PLS_INTEGER 存储整数、实数和浮点数 存储有符号整数,可使算术计算快速而有效 NATURAL DECIMAL NATURALLN FLOAT POSITIVE INTEGER POSITIVEN REAL SIGNTYPE

字符数据类型 字符数据类型包括: PL/SQL 的数据类型与 SQL数据类型的比较 CHAR VARCHAR2 LONG RAW 1..2000 1..32767 LONG 1..2GB 1..32760 LONG RAW RAW VARCHAR2 1..4000

日期时间和布尔数据类型 日期时间类型 布尔数据类型 存储日期和时间数据 常用的两种日期时间类型 此类别只有一种类型,即BOOLEAN类型 DATE TIMESTAMP 布尔数据类型 此类别只有一种类型,即BOOLEAN类型 用于存储逻辑值(TRUE、FALSE和NULL) 不能向数据库中插入BOOLEAN数据 不能将列值保存到BOOLEAN变量中 只能对BOOLEAN变量执行逻辑操作

LOB 数据类型 2-1 用于存储大文本、图像、视频剪辑和声音剪辑等非结构化数据。 LOB 数据类型可存储最大 4GB的数据。 CLOB 将大型字符数据存储在数据库中 NCLOB 存储大型UNICODE字符数据 BFILE 将大型二进制对象存储在操作系统文件中

从CLOB数据中读取24个字符存储到 output_var 变量中 DBMS_LOB程序包用于操纵 LOB 数据 SET SERVEROUTPUT ON DECLARE clob_var CLOB; amount INTEGER; offset INTEGER; output_var VARCHAR2(100); BEGIN SELECT chapter_text INTO clob_var FROM my_book_text WHERE chapter_id=5; amount := 24; -- 要读取的字符数 offset := 1; -- 起始位置 DBMS_LOB.READ(clob_var,amount,offset,output_var); DBMS_OUTPUT.PUT_LINE(output_var); END; / 从表中选择 CLOB 定位符 到 clob_var变量中 从CLOB数据中读取24个字符存储到 output_var 变量中 显示读到的信息

属性类型 用于引用数据库列的数据类型,以及表示表中一行的记录类型 属性类型有两种: 使用属性类型的优点: %TYPE - 引用变量和数据库列的数据类型 %ROWTYPE - 提供表示表中一行的记录类型 使用属性类型的优点: 不需要知道被引用的表列的具体类型 如果被引用对象的数据类型发生改变,PL/SQL 变量的数据类型也随之改变 icode itemfile.itemcode%TYPE; emp_rec scott.emp%ROWTYPE;

逻辑比较 逻辑比较用于比较变量和常量的值,这些表达式称为布尔表达式 布尔表达式的结果为TRUE、FALSE或NULL,通常由逻辑运算符AND、OR和NOT连接 布尔表达式有三种类型: 数字布尔型 字符布尔型 日期布尔型 逻辑比较用于比较变量和常量的值,这些表达式称为布尔表达式 布尔表达式由关系运算符与变量或常量组成 关系运算符 说明 = 比较两个变量是否相等,如果值相当,则返回 True <>, != 比较两个变量,如果不相等,则返回 True < 比较两个变量,检查值 1 是否小于值 2 > 比较两个变量,检查值 1 是否大于 值 2 <= 比较两个变量,检查变量 1 是否小于等于变量 2 >= 比较两个变量,检查变量 1 是否大于等于变量 2

控制结构 PL/SQL 支持的流程控制结构: 条件控制 循环控制 顺序控制 IF 语句 CASE 语句 LOOP 循环 WHILE 循环 FOR 循环 顺序控制 GOTO 语句 NULL 语句

条件控制 2-1 IF 语句根据条件执行一系列语句,有三种形式:IF-THEN、IF-THEN-ELSE 和 IF-THEN-ELSIF DECLARE icode VARCHAR2(4); irate NUMBER; BEGIN icode := 'i203'; SELECT itemrate INTO irate FROM itemfile WHERE itemcode = icode; IF irate > 200 THEN UPDATE itemfile SET itemrate = itemrate - 200 WHERE itemcode = icode; ELSE UPDATE itemfile SET itemrate = itemrate - 50 END IF; DBMS_OUTPUT.PUT_LINE('itemrate='|| irate); END;

条件控制 2-2 CASE 语句用于根据单个变量或表达式与多个值进行比较 执行 CASE 语句前,先计算选择器的值 BEGIN CASE ‘&grade’ WHEN ’A’ THEN DBMS_OUTPUT.PUT_LINE(’优异’); WHEN ’B’ THEN DBMS_OUTPUT.PUT_LINE (优秀’); WHEN ’C’ THEN DBMS_OUTPUT.PUT_LINE (’良好’); WHEN ’D’ THEN DBMS_OUTPUT.PUT_LINE (’一般’); WHEN ’F’ THEN DBMS_OUTPUT.PUT_LINE (’较差’); ELSE DBMS_OUTPUT.PUT_LINE (’没有此成绩’); END CASE; END;

循环控制 循环控制用于重复执行一系列语句 循环控制语句包括: 循环控制的三种类型: LOOP、EXIT 和 EXIT WHEN WHILE - 根据条件循环 FOR - 循环固定的次数 LOOP sequence_of_statements END LOOP; WHILE condition LOOP sequence_of_statements END LOOP; FOR counter IN [REVERSE] value1..value2 LOOP sequence_of_statements END LOOP;

顺序控制 顺序控制用于按顺序执行语句 顺序控制语句包括: GOTO 语句 - 无条件地转到标签指定的语句 NULL 语句 - 什么也不做的空语句 DECLARE qtyhand itemfile.qty_hand%type; relevel itemfile.re_level%type; BEGIN SELECT qty_hand,re_level INTO qtyhand,relevel FROM itemfile WHERE itemcode = 'i201'; IF qtyhand < relevel THEN GOTO updation; ELSE GOTO quit; END IF; <<updation>> UPDATE itemfile SET qty_hand = qty_hand + re_level WHERE itemcode = 'i201'; <<quit>> NULL; END;

动态 SQL 动态 SQL 是指在PL/SQL程序执行时生成的 SQL 语句 DDL 语句命令和会话控制语句不能在 PL/SQL 中直接使用,但是可以通过动态 SQL 来执行 执行动态 SQL 的语法: EXECUTE IMMEDIATE dynamic_sql_string [INTO define_variable_list] [USING bind_argument_list]; DECLARE sql_stmt VARCHAR2(200); emp_id NUMBER(4) := 7566; emp_rec emp%ROWTYPE; BEGIN EXECUTE IMMEDIATE 'CREATE TABLE bonus1 (id NUMBER, amt NUMBER)'; sql_stmt := 'SELECT * FROM emp WHERE empno = :id'; EXECUTE IMMEDIATE sql_stmt INTO emp_rec USING emp_id; END;

错误处理 2-1 在运行程序时出现的错误叫做异常 发生异常后,语句将停止执行,控制权转移到 PL/SQL 块的异常处理部分 异常有两种类型: 预定义异常 - 当 PL/SQL 程序违反 Oracle 规则或超越系统限制时隐式引发 用户定义异常 - 用户可以在 PL/SQL 块的声明部分定义异常,自定义的异常通过 RAISE 语句显式引发

错误处理 2-2 处理预定义异常 处理用户定义异常 DECLARE invalidCATEGORY EXCEPTION; DECLARE category VARCHAR2(10); BEGIN category := '&Category'; IF category NOT IN ('附件','顶盖','备件') THEN RAISE invalidCATEGORY; ELSE DBMS_OUTPUT.PUT_LINE('您输入的类别是'|| category); END IF; EXCEPTION WHEN invalidCATEGORY THEN DBMS_OUTPUT.PUT_LINE('无法识别该类别'); END; DECLARE ordernum VARCHAR2(5); BEGIN SELECT orderno INTO ordernum FROM order_master; EXCEPTION WHEN TOO_MANY_ROWS THEN DBMS_OUTPUT.PUT_LINE ('返回多行'); END;

引发应用程序错误 RAISE_APPLICATION_ERROR 过程 引发应用程序错误的语法: 用于创建用户定义的错误信息 可以在可执行部分和异常处理部分使用 错误编号必须介于 –20000 和 –20999 之间 错误消息的长度可长达 2048 个字节 引发应用程序错误的语法: RAISE_APPLICATION_ERROR(error_number, error_message); DECLARE rate itemfile.itemrate%TYPE; rate_exception EXCEPTION; BEGIN SELECT NVL(itemrate,0) INTO rate FROM itemfile WHERE itemcode = 'i207'; IF rate = 0 THEN RAISE rate_exception; ELSE DBMS_OUTPUT.PUT_LINE('项费率为:' || rate); END IF; EXCEPTION WHEN rate_exception THEN RAISE_APPLICATION_ERROR(-20001, '未指定项费率'); END;

总结 PL/SQL 是一种可移植的高性能事务处理语言 PL/SQL 引擎驻留在 Oracle 服务器中 PL/SQL 数据类型包括标量数据类型、LOB 数据类型和属性类型 控制结构包括条件控制、循环控制和顺序控制 PL/SQL 支持动态 SQL 运行时出现的错误叫做异常 异常可以分为预定义异常和用户定义的异常