下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、Oracle数据库高级 查询和管理,第四章 使用PLSQL语言,本章内容,PL/SQL基本语法 PL/SQL异常处理 Oracle事务,2020年6月22日2020/6/22,3,本章目标,掌握PL/SQL基本语法 掌握PL/SQL异常处理 掌握Oracle事务的使用,2020年6月22日2020/6/22,4,PL/SQL语言简介,PL/SQL是Oracle在标准SQL语言上的过程性扩展 允许嵌入SQL语句,定义变量和常量, 允许过程语言结构(条件分支语句和循环语句), 允许使用异常来处理Oracle错误 可以用于创建存储过程、触发器和程序包等, 也可以用于处理业务 规则、数据库事件或给SQ
2、L命令的执行添加程序逻辑,2020年6月22日2020/6/22,5,所有的PL/SQL程序都以块作为基本单位 块中包含过程化语句和SQL的DML语句。这些块可以按顺序出现,也可以相互嵌套(一个块在另一个块的内部) 块的分类 匿名块 匿名块是出现在应用程序中的没有名字且不存储到数据库中的块 匿名块出现在SQL语句可以出现的地方,它们可以调用其他程序,却不能被其他程序调用 命名块 命名块是一种带有标签的匿名块,标签为块指定了一个名称 子程序 子程序是存储在数据库中的过程(procedure)、函数(function),生成之后可以被多次执行 程序包 程序包是存储在数据库中的一组子程序、变量定义
3、程序包中的子程序可以被其他程序包或者子程序调用 触发器 触发器是一种存储在数据库中的命名块,生成之后可以被多次执行 在相应的触发器事件发生之前或之后就会被执行一次或多次,PL/SQL块,2020年6月22日2020/6/22,6,3.2.1 组成部分 定义部分 定义部分用于定义常量、变量、游标、异常和复杂数据类型 执行部分 执行部分用于实现应用模块功能,该部分包含需要执行的PL/SQL语句和SQL语句 异常处理部分 异常处理部分用于处理执行部分可能出现的运行错误 PL/SQL块的基本结构,程序结构,DECLARE 定义部分 BEGIN 执行部分 EXCEPTION 异常处理部分 END;,DE
4、CLAREE、BEGIN和EXCEPTION后面没有“;”(分号),而END后则必须要带“;”(分号)。,2020年6月22日2020/6/22,7,匿名块示例: 创建一个匿名程序块,该程序块用于接收用户输入的员工编号,查询并输出该员工的姓名,还用于处理用户输入的员工编号不存在的异常,程序结构,set serveroutput on set verify off DECLARE v_ename varchar2(50); BEGIN select ename into v_ename from emp where empno=,1. set serveroutput on设置输出、显示环境变量
5、 2. set verify off : 设置是否进行数据校验。,2. 定义块变量,3. 执行业务逻辑,4. 异常处理部分,2020年6月22日2020/6/22,8,PL/SQL注释,单行注释 单行注释可以在一行的任何地方由两个短横线(-)开始,并且直到该行的最后 多行注释 多行注释由“/*”开始、“*/”结束,可以跨越多行,但不允许嵌套,2020年6月22日2020/6/22,9,常量与变量,在声明部分中可以声明需要使用的常量、变量、函数、游标、异常处理名称,在PL/SQL中,每一行中能声明一个常量或变量。在引用一个常量或变量之前,必须先声明该常量或变量,declare v_pi cons
6、tant number(6,5):=3.14; -定义圆周率常量 v_r number(1):=2; v_area number(6,2); -定义保存圆面积的变量 begin v_area:=v_pi*v_r*v_r; dbms_output.put_line(半径:|v_r); -输出半径值 dbms_output.put_line(面积:|v_area); -输出圆的面积 end;,常量声明专用名词,: = 赋值符号,2020年6月22日2020/6/22,10,常量与变量,除了可以使用常量来给变量赋值之外,还可通过SELECT INTO语句将从数据库表中查询的结果赋予变量,set se
7、rveroutput on set verify off DECLARE v_ename varchar2(50); BEGIN select ename into v_ename from emp where empno=,2020年6月22日2020/6/22,11,数据类型,2020年6月22日2020/6/22,12,%TYPE数据类型 当定义PL/SQL变量存放值时,必须确保变量使用合适的数据类型和长度,否则可能会在运行过程中出现PL/SQL运行错误 为了避免这种不必要的错误,可以使用%TYPE属性来定义变量 当使用%TYPE属性定义变量时,Oracle会自动地按照数据库表列或其他变
8、量来确定新变量的类型和长度 %ROWTYPE数据类型 如果一张表中包含较多的列,则可以使用%ROWTYPE来定义一个表示表中一行记录的变量 示例: 根据输入的员工编号查找该员工信息,及其所在部门的信息。,数据类型,declare v_ename emp.ename%type; v_deptno dept.deptno%type; v_dept_row dept%rowtype; begin select ename ,deptno into v_ename,v_deptno from emp where empno=,declare v_ename emp.ename%type; -定义和em
9、p表的ename相同的类型,declare v_dept_row dept%rowtype; -定义和dept相同的行类型,2020年6月22日2020/6/22,13,%record数据类型 类似高级语言中的结构 首先需要定义记录类型和记录变量 当引用记录成员时,必须将记录变量作为前缀 示例: 根据输入的员工编号输出该员工的姓名、基本工资、奖金及实发工资。,数据类型,declare type emp_record_type is RECORD( ename emp.ename%type, sal emp.sal%type, comm m%type, total_sal sal%type );
10、 v_emp_record emp_record_type; begin select ename,sal,nvl(comm,0),sal+nvl(comm,0) into v_emp_record from emp where empno=7369; dbms_output.put_line(员工姓名:| v_emp_record.ename); dbms_output.put_line(基本工资:| v_emp_record.sal); dbms_output.put_line(奖金:| v_emp_m); dbms_output.put_line(实发工资:| v_emp_record.
11、total_sal); end;,declare type emp_record_type is RECORD(-定义一个记录类型,包含员工信息 ename emp.ename%type, sal emp.sal%type, comm m%type, total_sal sal%type ); v_emp_record emp_record_type;-声明记录类型变量,2020年6月22日2020/6/22,14,数据类型,一维数组的方式,TABLE数据类型 TABLE(索引表)相当于一个键值集合,键是唯一的,用于查找对应的值。键可以是整数或字符串 示例: 将部门编号是10和20的部门信息存
12、储到table类型中,然后输出其信息。,declare type dept_table_type is table of dept%rowtype index by binary_integer; v_dept_table dept_table_type; begin select * into v_dept_table(0) from dept where deptno=10; select * into v_dept_table(1) from dept where deptno=20; dbms_output.PUT_LINE(编号:|v_dept_table(0).deptno| 名称
13、: |v_dept_table(0).dname| 所在地:|v_dept_table(0).loc); dbms_output.PUT_LINE(编号:|v_dept_table(1).deptno| 名称: |v_dept_table(1).dname| 所在地:|v_dept_table(1).loc); end;,declare type dept_table_type is table of dept%rowtype index by binary_integer; v_dept_table dept_table_type;,2020年6月22日2020/6/22,15,流程控制,3
14、.1 条件控制,IF 条件表达式 THEN 语句段 END IF;,IF 条件表达式 THEN 语句段1 ELSE 语句段2 END IF;,IF 条件表达式1 THEN 语句段1 ELSIF 条件表达式2 THEN 语句段2 ELSIF 条件表达式3 THEN 语句段3 . ELSIF 条件表达式n 语句段n END IF;,注意:是elsif 不是elseif, 也不是else if,2020年6月22日2020/6/22,16,员工奖金发放: 输入员工编号,如果该员工 原来没有奖金,则按照工资的10%发放 原来有奖金但不超过1000的,补到1000; 其余的按照原来奖金基础再加上10%发
15、放;,流程控制,declare v_emp emp%rowtype; begin v_emp.empno:=,2020年6月22日2020/6/22,17,条件控制,条件控制case 根据部门编号输出部门所在地 10 纽约 20 达拉斯 30 芝加哥 40 波士顿,CASE 表达式 WHEN 条件表达式结果1 THEN 语句段1; WHEN 条件表达式结果2 THEN 语句段2; . ELSE 语句段n; END CASE;,declare v_deptno dept.deptno%type:=,2020年6月22日2020/6/22,18,条件控制,条件控制case 根据员工编号输出员工工资
16、级别 sal=2000 and sal2 then exit; end if; insert into dept values ( v_dept_table(i).deptno,v_dept_table(i).dname,v_dept_table(i).loc); i:=i+1; end loop; end;,定义表结构,声明循环控制变量,2020年6月22日2020/6/22,20,条件控制,while循环 定义一个dept类型的表结构 手工添加3条数据 然后用循环将其数据添加到dept表中。,WHILE 条件表达式 LOOP 语句段; END LOOP;,declare type dept
17、_table_type is table of dept%rowtype index by binary_integer; i number(1):=0; v_dept_table dept_table_type; begin v_dept_table(0).deptno:=50; v_dept_table(0).dname:=研发部; v_dept_table(0).loc:=北京; v_dept_table(1).deptno:=60; v_dept_table(1).dname:=开发部; . while i set autocommit on; SQL show autocommit;
18、,2020年6月22日2020/6/22,31,事务,4.5.3 事务控制语句 Commit 语句用于提交事务 Rollback 语句可以将事务回滚到事务的起点或某个保存点开始 Savepoint Rollback to ,2020年6月22日2020/6/22,32,事务,查看事务 以sys身份登录并给scott.dept表录入数据 当前事务是匿名事务,所以name字段值为空,2020年6月22日2020/6/22,33,事务,查看事务 命名事务,begin set transaction name deptTran; insert into scott.dept values(35,工程部,天津); end; select name,stat
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026年医院违规收费自查整改报告(3篇)
- 水和钠代谢失衡病人的护理
- 2025 清热剂黄连解毒汤脓毒症(感染性休克)调治课件
- 骨科关节镜手术操作
- 临床护理文书规范撰写
- 老年痴呆症的药物治疗研究
- 医疗机器人手术的精准性与安全性
- 人体健康与疾病神经系统
- 除颤仪使用培训
- 自考00658新闻评论写作核心内容
- 2026年企业文化企业建设知识竞赛-中国电信知识竞赛历年参考题库含答案解析
- 2026高考议论文范文19篇(完整版含真题立意+考场高分作文)
- ESG管理制度手册
- 2026苏教版二上数学第二单元第5课时《用1~6的乘法口诀求商》课件
- 2026-2027学年苏教版(新教材)小学科学五年级上册(全册)知识点清单
- 2026年湖南省中考历史试卷(含答案)
- 校园小导游、小讲堂(课件)-2025-2026学年人教版二年级上册数学
- 《演唱 郊游》课件2025-2026学年冀少版三年级下册音乐
- 矿山全员责任制考核制度
- 2026年乡村医生真题【历年真题】附答案详解
- 2026年C1驾照三力测试模拟题库
评论
0/150
提交评论