PL/SQL更改数据和管理事务
2014-06-05 12:24
423 查看
①在PL/SQL中使用DML
DML语句即UPDATE,DELETE,INSERT.
1)DML操作的游标属性
当从PL/SQL中执行一条select语句时,Oracle数据库管理系统会为该语句分配一个私有的工作区(包含了该语句的信息以及结果集的信息),同时并将查询的结果集放入系统全局区,Oracle中使用游标作为指针来引用该私有工作区
隐式游标的相关属性:
SQL%FOUND 如果记录成功获取,返回TRUE,否则返回FALSE.
SQL%NOTFOUND 如果记录获取失败,返回TRUE,否则返回FALSE.
SQL%ISOPEN 总是返回FALSE.—因为是在我们当时使用时打开,之后自动关闭,所以总是返回FALSE.
例:
2)DML语句的returning子句
例:
②使用forall语句的批量DML
Forall语句的语法形式如下:
Forall index in lower_bound .. upper_bound
Sql语句;
其中,index为隐含定义的整数变量,作为集合元素的下标使用;lower_bound和upper_bound分别是集合元素的上界和下界.
*forall语句的主体必须是单个的insert,update或delete语句.
1) 在insert语句用批量绑定
结果为:
③PL/SQL中的数据库事务管理
1)数据库事务的概念
* Oracle将一组SQL语句组成的一个逻辑工作单元看作一个数据库事务
* 一个逻辑工作单元包含四个属性: ACID(原子性,一致性,隔离性,持久性
)
原子性: 指事务是一个不可分割的工作单元,即事务中包含的所有操作要么全做,要么都不做;
一致性: 指事务必须使系统从一个一致性状态变换到另一个一致性状态,即事务的总体上不能破坏特定环境下的任何业务规则,如转账的两个账号里的钱总和要保持不变;
隔离性: 指定的每个事务必须独立于其它事务执行,并且事务中的操作同时发生即活动的事务所做的改变对并发运行的其它事务来说是不可见的;
持久性: 确保事务完成后,对数据的修改是永久性的,即使接下来发生系统故障也不会对其有任何影响.
PL/SQL提供了如下的语句来管理事务:
l COMMIT:
提交所有的改变到数据库,释放锁定的资源,
l ROLLBACK:
回滚所有的改变,释放锁定的资源.
l ROLLBACK TO S***EPOINT:
回滚到指定的保存点,释放保存点范围内锁定的资源
l S***EPOINT:
设置一个保存点,可以回滚到此点.
l SET TRANSACTION:
允许我们开始一个只读或可读写的会话,建立隔离级别,或分配当前的事务到一个指定的回滚段.
l LOCK TABLE:
允许我们使用指定的模式锁住整个数据库表,它将覆盖默认的行级锁.
例子:
3)数据库中的锁
SHARE(S锁):
共享锁,某事务使用s锁锁住该表,只允许使用该表即查,不能修改;
EXCLUSIVE(X锁):
排他锁, 事务对表加了X锁后,不再允许其它事务锁定该表;
ROWSHARE(RS锁),行级共享锁,对相应行加上RS锁后,仍然允许其他事务加RS锁.
ROWEXCLUSIVE(RX锁):
行级排他锁, 对相应行加上RX锁后,其他事务不能再对该表加锁.
SHARE ROWEXCLUSIVE(SRX锁):
共享行级排他锁, 对相应行加X锁,但对表加S锁,所以可以让别的事务对其他行加入X锁.
*在执行INSERT,UPDATE,DELETE语句时,自动产生行级排他锁(RX锁);
*在执行CREATE 语句时,自动产生共享(S锁);
*在执行ALTER语句时,自动产生排他锁(X锁).
DML语句即UPDATE,DELETE,INSERT.
1)DML操作的游标属性
当从PL/SQL中执行一条select语句时,Oracle数据库管理系统会为该语句分配一个私有的工作区(包含了该语句的信息以及结果集的信息),同时并将查询的结果集放入系统全局区,Oracle中使用游标作为指针来引用该私有工作区
隐式游标的相关属性:
SQL%FOUND 如果记录成功获取,返回TRUE,否则返回FALSE.
SQL%NOTFOUND 如果记录获取失败,返回TRUE,否则返回FALSE.
SQL%ISOPEN 总是返回FALSE.—因为是在我们当时使用时打开,之后自动关闭,所以总是返回FALSE.
例:
select * from scott.emp declare begin delete from scott.emp where sal<=2000; if sql%found then dbms_output.put_line('被开除的员工共有'||sql%rowcount||'人'); end if; end;
2)DML语句的returning子句
例:
declare v_ename scott.emp.ename%type; v_sal scott.emp.sal%type; begin for rec in (selectempno,ename,sal from scott.emp) loop update scott.emp setsal = sal*2 whereempno = rec.empno returning ename,sal intov_ename,v_sal; dbms_output.put_line('员工'||v_ename||'工资ª'||v_sal); end loop; end;
②使用forall语句的批量DML
Forall语句的语法形式如下:
Forall index in lower_bound .. upper_bound
Sql语句;
其中,index为隐含定义的整数变量,作为集合元素的下标使用;lower_bound和upper_bound分别是集合元素的上界和下界.
*forall语句的主体必须是单个的insert,update或delete语句.
1) 在insert语句用批量绑定
create table demo( --创建一个demo表 dname varchar2(10), dsal number(7,2) ); declare type dname_table_type istable of varchar2(10) index by binary_integer; --定义表类型和表变量 type dsal_table_type istable of varchar2(10) index by binary_integer; dname_table dname_table_type; dsal_table dsal_table_type; begin for i in 1..10 --用循环给表变量赋值 loop dname_table(i) := 'a'||to_char(i); dsal_table(i) := i*100; end loop; forall i in 1..dname_table.count --将两个表变量中的数据批量绑定插入到demo中 insert into demo values(dname_table(i),dsal_table(i)); end; select * from demo;
结果为:
③PL/SQL中的数据库事务管理
1)数据库事务的概念
* Oracle将一组SQL语句组成的一个逻辑工作单元看作一个数据库事务
* 一个逻辑工作单元包含四个属性: ACID(原子性,一致性,隔离性,持久性
)
原子性: 指事务是一个不可分割的工作单元,即事务中包含的所有操作要么全做,要么都不做;
一致性: 指事务必须使系统从一个一致性状态变换到另一个一致性状态,即事务的总体上不能破坏特定环境下的任何业务规则,如转账的两个账号里的钱总和要保持不变;
隔离性: 指定的每个事务必须独立于其它事务执行,并且事务中的操作同时发生即活动的事务所做的改变对并发运行的其它事务来说是不可见的;
持久性: 确保事务完成后,对数据的修改是永久性的,即使接下来发生系统故障也不会对其有任何影响.
PL/SQL提供了如下的语句来管理事务:
l COMMIT:
提交所有的改变到数据库,释放锁定的资源,
l ROLLBACK:
回滚所有的改变,释放锁定的资源.
l ROLLBACK TO S***EPOINT:
回滚到指定的保存点,释放保存点范围内锁定的资源
l S***EPOINT:
设置一个保存点,可以回滚到此点.
l SET TRANSACTION:
允许我们开始一个只读或可读写的会话,建立隔离级别,或分配当前的事务到一个指定的回滚段.
l LOCK TABLE:
允许我们使用指定的模式锁住整个数据库表,它将覆盖默认的行级锁.
例子:
createtable demo( empnoint , enamevarchar2(10), salnumber(6,2) ) begin --第一个事务开始 insertinto demo values(9999,'name1',1000.00); commit; --第一个事务结束,第二个事务开始 deletefrom demo where empno='9999'; savepointa; insertinto demo values(8888,'name2',1200.00); rollbackto savepoint a; insertinto demo values(7777,'name3',1310.00); commit; end; select* from demo;
3)数据库中的锁
SHARE(S锁):
共享锁,某事务使用s锁锁住该表,只允许使用该表即查,不能修改;
EXCLUSIVE(X锁):
排他锁, 事务对表加了X锁后,不再允许其它事务锁定该表;
ROWSHARE(RS锁),行级共享锁,对相应行加上RS锁后,仍然允许其他事务加RS锁.
ROWEXCLUSIVE(RX锁):
行级排他锁, 对相应行加上RX锁后,其他事务不能再对该表加锁.
SHARE ROWEXCLUSIVE(SRX锁):
共享行级排他锁, 对相应行加X锁,但对表加S锁,所以可以让别的事务对其他行加入X锁.
*在执行INSERT,UPDATE,DELETE语句时,自动产生行级排他锁(RX锁);
*在执行CREATE 语句时,自动产生共享(S锁);
*在执行ALTER语句时,自动产生排他锁(X锁).
相关文章推荐
- PL/SQL程序控制结构及在PL/SQL中更改数据和管理事务
- Ch4 PL/SQL数据更改和管理事务
- PL/SQL更改数据和管理事务
- 4.PL/SQL更改数据和管理数据库
- Oracle PL/SQL 程序设计读书笔记 - 第14章 DML和事务管理
- PLSQL更改数据及管理事务
- oracle 数据库的管理工具 PL/SQL_Developer 的简易使用 与Java 连接并查询显示出数据
- Oracle学习笔记(4) 在PLSQL中更改数据和管理事务
- PLSQL更改数据及管理事务
- PLSQL更改数据及管理事务
- 源码-PL/SQL从入门到精通-第五章-管理数据表
- PL/SQL 一个数据对象一个事务(且记录错误信息到处理对象)(rollback,submit)
- Oracle学习笔记(第四章) 在PLSQL中更改数据和管理事务
- [Oracle]在PL/SQL中更改数据和使用游标获取数据
- PL/SQL数据类型和效率分析
- [Oracle PL/SQL]当数据表设计成具有父ID的时候,当需要选择所有与父ID同根生的所有节点的时候,使用的SQL语句
- PL/SQL的数据类型和常用函数
- 项目管理、DevExpress、集成测试、Soa、pl/sql、2006年的积累
- ORACLE 存储过程及TABLE里的数据用PL/SQL备份及用PLUS SQL还原
- PL/SQL数据类型及操作符