首页 > 学院 > 开发设计 > 正文

PL/SQL程序控制结构及在PL/SQL中更改数据和管理事务

2019-11-15 00:45:54
字体:
来源:转载
供稿:网友
PL/SQL程序控制结构及在PL/SQL中更改数据和管理事务1.条件控制

A. IF条件分支语法:

if (条件1) then

语句;

elsif (条件2) then

语句;

elsif (条件3) then

语句;

else

语句;

end if;

B . case条件分支:等值比较、条件比较、case表达式

a.等值比较语法:

CASE 条件判断

WHEN 条件值的表达式 THEN 要执行的条件操作 ;

…….

[ELSE ……..]

END CASE;

b. 条件比较语法:

CASE

WHEN 不同比较条件 THEN 要执行的条件操作 ;

…….

[ELSE ……..]

END CASE;

2. 循环控制

A. 基本循环:无论是否满足条件,语句至少执行一次

语法:LOOP

……..

EXIT [WHEN 条件语句];

END LOOP;

B. WHILE循环:只有条件为真时,才会执行

语法: WHILE 条件语句 LOOP

…………………………………..

END LOOP;

C. FOR循环

语法: FOR 循环计数器 IN [REVERSE] 下限.. 上限 LOOP

……………………………………………………………………………………

END LOOP;

D. 嵌套循环和标号:定义标号:<< 标号名称 >>

3. 顺序控制

A.GOTO语句:用于跳转到指定<<标号>>去执行语句。

缺点是会增加程序的复杂性,降低可读性,所以Oracle建议昼不要使用。

B. NULL语句:空语句,执行没有任何实际效果,通常占位置用

4. 异常处理

A.异常有两种类型:

a. 预定义异常 : 当 PL/SQL 程序违反 Oracle 规则或超越系统限制时隐式引发

b. 用户定义异常 : 用户可以在 PL/SQL 块的声明部分定义异常,自定义的异常通过 RAISE 语句显式引发

B. 定义异常语法:异常名称 EXCEPTION;

PRAGMA EXCEPTION_INIT(异常名称, 错误号);

C. 抛出异常语法

a. RAISE 异常名称;

b. RAISE_application_ERROR(错误号 , 错误描述 [, {TRUE|FALSE}]);

D. 处理异常语法

EXCEPTION

WHEN ……. THEN

…………….

WHEN THEN

WHEN OTHERS THEN

………….

5. DML操作的游标属性

A. 隐式游标

a. 名称:SQL

b. 属性:SQL%属性名

c. 常见属性

SQL%FOUND:操作到数据

SQL%NOTFOUND:没有操作到数据

SQL%ROWCOUNT:操作的记录数

B. DML语句的RETURNING字句:返回SQL执行以后的结果

6. 用ForAll语句批量执行DML

A. ForAll语句语法

ForAll 索引 in 开始..结束

sql语句; --注意,只有一句!

B . 在INSERT语句上使用批量绑定:首先要给集合元素赋值,然后再使用ForAll语句批量绑定

C. ForAll的游标属性

a. SQL%FOUND:操作到数据

b. SQL%NOTFOUND:没有操作到数据

c. SQL%ROWCOUNT:操作的记录数

d. SQL%BULK_ROWCOUNT:返回批量执行时第i个元素所作用的行数

7. PL/SQL中的数据库事务管理

A. 事务概念:事务就是一个完整的逻辑工作单元,由多个操作组成。所有操作要么全部成功,要么全部失败

B. 事务特点: ACID:原子性、一致性、隔离性、(永)持久性

C. 事务控制流程

开始事务

自动执行第一条SQL开始

执行SQL

可能执行多条SQL

提交或回滚

commit或rollback

D. 锁的概念:锁是数据库用来控制共享资源并发访问的机制、锁用于保护正在被修改的数据、直到提交或回滚了事务之后,其他用户才可以更新数据

E. 锁的类型:行级锁、表级锁

a.行级锁:对正在被修改的行进行锁定。其他用户可以访问除被锁定的行以外的行

在使用以下语句时,Oracle会自动应用行级锁:

a. INSERT

b. UPDATE

c. DELETE

d. SELECT … FOR UPDATE

使用COMMIT或ROLLBACK语句释放锁

b. 表级锁:锁定整个表,限制其他用户对表的访问

语法: LOCK TABLE table_name IN mode MODE;

F. 死锁:当两个事务相互等待对方释放资源时,就会形成死锁、Oracle会自动检测死锁,并通过结束其中的一个事务来解决死锁

8. 事务隔离级别

A. 分类

a. 未提交读

读其它用户没有提交的数据,又称脏读

b.提交读:Oracle支持,这也是默认支持的级别(可能会发生不可重复读数据异常)

c.可重复读: Oracle不支持(可能会发生幻读数据异常)

d.串行读: Oracle支持,不过效率低

9. 数据库事务实现机制:通过日志文件实现


发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表