1 / 16
文档名称:

proC程序设计-3.ppt

格式:ppt   大小:107KB   页数:16页
下载后只包含 1 个 PPT 格式的文档,没有任何的图纸或源代码,查看文件列表

如果您已付费下载过本站文档,您可以点这里二次下载

分享

预览

proC程序设计-3.ppt

上传人:iris028 2022/8/2 文件大小:107 KB

下载得到文件列表

proC程序设计-3.ppt

相关文档

文档介绍

文档介绍:Pro*C程序设计
Tiger Consultation Studio
Date
1

目录
Pro*C概述
Pro*C基础知识
事务处理
动态SQL技术
总结
Date
2

SAVEPOINT 语句在事务中起到一个保存点标识作用。
通过该语句,事务可回滚到特定的savepoint标识处。
在一个事务中可有多个SAVEPOINT 语句。
EXEC SQL SAVEPOINT start_delete;
EXEC SQL DELETE FROM mail_list
WHERE stat = ’INACTIVE’;
if ([2] >= 25)
/* 检查删除的记录条数,如果大于等于25条则回滚删除 */
{
printf("Undoing deletion of %d rows\n", [2]);
EXEC SQL WHENEVER SQLERROR GOTO sqlerror;
EXEC SQL ROLLBACK TO SAVEPOINT start_delete;
}
Date
7

ROLLBACK语句(1)
ROLLBACK 语句完成事务中对数据库数据所做修改的回滚(恢复),主要完成的工作:
恢复当前事务对数据库所做的所有数据改变
删除所有SAVEPOINT
结束事务
释放事务所占用的行和表级锁
MODE=ANSI 情况下关闭所有游标,MODE=ORACLE 情况下保留游标打开和当前记录级状态
Date
8

ROLLBACK语句(2)
ROLLBACK TO SAVEPOINT 语句所完成的工作:
回滚指定SAVEPOINT 语句后所作的数据库改变
删除所有指定SAVEPOINT 语句后的SAVEPOINT
释放指定SAVEPOINT 语句后的行、表锁
带有RELEASE子句的ROLLBACK语句断开数据库连接,即回滚事务并断开数据库连接。
EXEC SQL ROLLBACK WORK RELEASE;
注意:ROLLBACK TO SAVEPOINT 语句不能同RELEASE 子句同时使用
Date
9

SET TRANSACTION语句
使用此语句开始一个只读事务,必须位于事务开始。
EXEC SQL SET TRANSACTION READ ONLY;
在一个事务中,此语句只能出现一次,在只读事务中,只能执行SELECT、COMMIT和ROLLBACK语句。
只读事务主要用于:在其他事务进行对目标表数据更新的同时,对目标表进行数据查询。
如果不采用只读事务进行查询,Oracle 会认为事务有可能对目标数据进行更新,可能会根据pro*C/C++编程情况造成锁等待、取数据表锁死等错误。
在只读事务中,其他用户进程可以继续对目标表进行数据维护和查询。
COMMIT、ROLLBACK和数据定义语句(CREATE、ALTER等)会结束只读事务,并从下个SQL 语句开始新的正常事务。
Date
10

设置锁状态
通常情况下,Oracle 会根据用户程序自动对数据加入适当的锁
在用户特殊需要的情况下,如在并发程序时保持高度数据一致性,需要通过用户编程代替默认的锁操作。
可以使用下面两种方式设置锁状态
使用FOR UPDATE OF
使用LOCK TABLE
Date
11

使用FOR UPDATE OF(1)
当声明一个用于包含CURRENT OF子句的DELETE、UPDATE 语句的游标时,使用FOR UPDATE OF 子句给所操作的记录添加独占模式的行级锁,保证在选出数据后,进行真正UPDATE 和DELETE 语句前该行数据没有被修改。
SELECT FOR UPDATE OF 语句表明所选择的数据行将进行更新或删除,所有此活动记录的数据行都将被锁定,直到该行被更新、删除或事务结束。例子如下:
EXEC SQL DECLARE emp_cursor CURSOR FOR
SELECT ename, job, sal FROM emp WHERE deptno = 20
FOR UPDATE OF sal;
Date
12

使用FOR UPDATE OF(2)
注意事项
用户能够省略掉FOR UPDATE 子句,如下:
EXEC SQL DECLARE emp_cursor CURSOR FOR
SELECT ename, job, sal FROM emp WHERE deptno =