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

…………….

WHENTHEN

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.  数据库事务实现机制:通过日志文件实现

全部评论

相关推荐

不愿透露姓名的神秘牛友
11-21 19:05
面试官_我太想进步了:混学生会的,难怪简历这么水
点赞 评论 收藏
分享
11-27 12:43
已编辑
门头沟学院 C++
点赞 评论 收藏
分享
评论
点赞
收藏
分享
牛客网
牛客企业服务