Oracle学习笔记
PL/SQL语法,四种特殊数据类型(%type,%rowtype,record,table),流程控制(条件控制,循环控制)…
☔ ☔ ☔
数据库语言分类:
1.数据管理语言DML:GRANT
2.数据定义语言DDL:CREATE USER
3.数据操作语言DCL:SELECT INSERT UPDATE DELETE
4.数据控制语言TML:COMMIT/ROLLBACK
一,PL/SQL
1.什么是PL/SQL块,有什么优点
PL/SQL块是用SQL语言书写的代码块,可以用来声明变量,写判断,循环等,实现类似Java方法的代码块。
优点是可以减少Java与数据库交互的频率,提高应用程序的运行能力。
2.有几种PLSQL块
匿名块:出现在应用程序中的没有名称且不存储到数据库中的块,匿名块可以出现在SQL语句出现的地方,
他们可以调用其他程序,却不能被其他程序调用。
命名块:命名块是一种带有标签的匿名块,标签为块制定一个名称(可存储,可调用)。
3.PLSQL块有几部分组成
PL/SQL块由三部分组成:定义部分,执行部分和异常处理部分
4.Oracle中4种特殊的数据类型
%type:自动匹配类型,Oracle会自动地按照数据库表列或其他变量来确定新变量的类型和长度,保证数据类型和长度一致,针对单列。
%rowtype:存储表的一行,select into 存储数据时用直接存一行,行变量。
record:自定义数据类型,可包含多个字段,相当于创建出的Object类(可独立声明),自定义行变量。
*table:相当于数组类型,可存储多行数据,可以下标自增(可独立声明)。
- PL/SQL程序块基本语法
1 | -- 声明 |
5.操作实例
常量:必须赋初值,值不可修改。
select必须使用into子句,into赋值。
1 | --用匿名块表示接受用户输入的员工编号,输出员工姓名,处理用户输入编号不存在的情况 |
6.record 数据类型
RECORD类似高级语言中的结构
首先需要定义记录类型和记录变量
当引用记录成员时,必须将记录变量作为前缀
1 | --创建数据类型record |
7.TABLE数据类型
TABLE(索引表)相当于一个键值集合,键是唯一的,用于查找对应的值。键可以是整数或字符串 table中存放多个类似值
- 索引类型(BINARY_INTEGER数字)(VARCHAR2字符)
1 | --table数据类型 |
习题练习
1 | --输入员工编号,输出部门名称 |
二,流程控制
- 流程控制:分支结构(if case)循环结构(WHILE FOR)
1.条件控制
(1). 条件控制——IF
1 | /* |
(2). 条件控制——case
- when后面跟完整表达式时,case后面的表达式可以省略

1 | /* |
2.循环控制
(1). 循环控制—loop

1 | -- 循环控制 |
(2). 循环控制—while
- while后面跟条件

1 | --while loop end loop; |
(3). 循环控制—for
reverse代表循环变量每次减1
默认代表循环变量每次加1

1 | --for in(从小到大) loop end loop; |
习题练习
1 | --员工scoot入职时间大于等于6年,修改奖金为2000,小于6年,奖金修改为1500 |
三,异常处理
异常是指通过了编译的PL/SQL程序在运行时产生的错误 PL/SQL提供了一种异常错误处理机制,可以帮助实现对错误的捕获和处理
1.预定义异常
针对一些常见的错误,PL/SQL预定义了一些异常错误
当PL/SQL程序违反了Oracle的规定或超出了系统规定的限制时,就会隐含地引发一个预定义的错误

2.异常处理的语法

1 | begin |
3.自定义异常
在实际的PL/SQL程序开发过程中,为了具体的业务规则、编程和调试的需要,程序员可以自定义一些异常。 自定义异常必须要声明,并且必须使用RAISE语句显式地引发。
在更新表中的数据时,如果没有符合条件的记录,则不会更新数据。因为这不是错误,所以不会有任何的错误提 示,但可以使用自定义错误异常的方法来提示。
1 | --自定义异常(删除不存在的员工,不会报错,可以自定义异常抛出) |
习题练习
1 | --给员工scott增加工资,每次增加100,直到增加到10000为止 |
三,事务
事务特性
Ø 原子性(Atomicity) 事务是数据库的逻辑工作单位,事务中包括的诸多操作要么全做,要么全不做。
Ø 一致性(Consistency) 事务执行的结果必须是使数据库从一个一致性状态变到另一个一致性状态。一致性与原子 性是密切相关的。
Ø 隔离性(Isolation) 一个事务的执行不能被其他事务干扰。
Ø 持久性(durability) 一个事务一旦提交,它对数据库中数据的改变就应该是永久性的。
事务控制语句
Ø Commit 语句用于提交事务 。
Ø Rollback 语句可以将事务回滚到事务的起点或某个存储点开始,作用:回滚事务,取消对数据库所作的任何操 作。
Ø Savepoint <保存点>在事务中建立一个存储的点。当事务处理发生异常而回滚事务时,可以将数据回滚到保存点 的位置,从而实现事务的部分回滚功能。
Ø Rollback to <回滚点>可以通过 Rollback to 回滚到这个你定义的保存点上 在一个大的事务中通过Savepoint 和 Rollback to可以把一个大的事务分割为几个小事务,实现回滚小事务,rollback后整个大事务直接回滚 。
1 | -- 事务 |
四,事物锁
- 加锁是实现数据库并发控制的一个非常重要的技术:
Ø 排它锁(Exclusive Locks,即X锁)当数据对象被加上排它锁时,其他的事务不能对它读取和修改。
Ø 共享锁(Share Locks,即S锁)加了共享锁的数据对象可以被其他事务读取,但不能修改。
根据保护对象的不同,Oracle数据库锁可分为:
1). DML lock(data locks,数据锁):用于保护数据的完整性。
2). DDL lock(dictionary locks,字典锁):用于保护数据库对象的结构(例如表、视图、索引的结构定义)。
3). Internal locks 和 latches(内部锁与闩):保护内部数据库结构。
4). Distributed locks(分布式锁):用于OPS(并行服务器)中。
5). PCM locks(并行高速缓存管理锁):用于OPS(并行服务器)中。
在Oracle中最主要的锁是DML锁
DML锁的目的在于保证并发情况下的数据完整性。
在Oracle数据库中,DML锁 主要包括TM锁和TX锁,
其中TM锁称为表级锁(面向对象),TX锁称为事务锁或行级锁(面向事物)。
TM是面向对象的锁,表示锁定系统中的一个对象,在锁定期间不允许其他人对这个对象做DDL操作,TM锁首先产生,目的就是为了实施DDL保护。
TX是面向事物的锁,表示发起了一个事物,是否有事物产生,这是根据是否使用undo段作为评判标准的。
加锁模式
A:自动加锁 做增删改查操作时,oracle自动完成加锁
B:手动加锁 一般的语法: lock table STUDENT in exclusive mode;(表级锁排他) 但是在java程序中怎样去调用这样的语 句,暂时没弄出来,这些语句在dba的使用的比较多
管理锁
dba才有权限
1 | --查询锁情况 |
事物死锁
当一个事务两人同时在修改时,互等对方释放资源,产生死循环。
例如:
当A窗口更新数据1时(没提交没回滚) 同时更新B窗口的数据2
当B窗口更新数据2时(没提交没回滚) 同时更新A窗口的数据1
总结
PL/SQL基本语法
Ø 常量、变量命名:变量名称或者常量名称 【constant】 data_type :=
Ø 程序结构:declare begin exception end;
Ø 条件判断、循环:if then elsif…then end if;case when then … end case;loop exit[when 表达式] end loop; while … loop end loop;for [循环变量] in 初值表达式…终值表达式 loop [语句段] end loop;
PL/SQL异常处理
Ø 预定义异常、自定义异常
Oracle事务
Ø 事务的特性ACID
Ø commit、savepoint、rollback to
事务的死锁
大型数据库应用系统存在并发机制,也就是说可能同时有多个会话访问同一个数据,这时可能不可避免出现死锁。
- 本文作者:
腾飞
- 本文链接:
https://www.tengfei.eu.org/article/5be95253.html
- 版权声明: 本作品采用 知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议 进行许可。转载请注明出处!