PL/SQL更改数据和管理事务
来源:互联网 发布:软件版本说明模板 编辑:程序博客网 时间:2024/06/07 05:42
①在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.
例:
select * from scott.empdeclarebegindelete 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 SAVEPOINT:回滚到指定的保存点,释放保存点范围内锁定的资源
l SAVEPOINT:设置一个保存点,可以回滚到此点.
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数据更改和管理事务
- 4.PL/SQL更改数据和管理数据库
- Oracle数据库编程:在PL/SQL中更改数据和管理事物
- PLSQL更改数据及管理事务
- PLSQL更改数据及管理事务
- [Oracle]在PL/SQL中更改数据和使用游标获取数据
- Oracle学习笔记(4) 在PLSQL中更改数据和管理事务
- Oracle学习笔记(第四章) 在PLSQL中更改数据和管理事务
- 浅谈管理事务和数据
- Pl/sql 和 T-Sql中事务的使用方法对比
- 更改/添加 pl/sql 地址
- SQL server-管理事务和数据库
- PL SQL 操纵数据
- PL/SQL 数据生成器
- PL/SQL数据设计
- 【SQL】数据查询和管理
- Alpha测试与beta测试的区别
- WebRTC 学习笔记(1)--总述
- 第六章课后题
- 分享一百多套开发视频教程的下载地址
- <meta name="viewport" content="width=device-width, maximum-scale=1.0, initial-scale=1.0, user-sc
- PL/SQL更改数据和管理事务
- PHP获取今天、昨天、明天的日期
- MYSQL数据库,查询一周内,合计每天的数量和出现的行数,没有记录的那一天就显示0
- 显示游标获取数据-PL/SQL
- POJ2528Mayor's posters
- 杭电acm2560 Buildings
- 常用JavaScript整理
- Construct Binary Tree from Preorder and Inorder Traversal
- Java 类中方法运行先后