plspl中回滚怎么用
A. spring中事务回滚,如何设置
单写一个接口,接口中再定义提交和回滚,在接口中判断。
比如有两个sql语句,第一个执行了后,判断是否有异常、错误。如果第一个出现异常等,那么直接就停止了。
若第一个sql执行通过了,第二个报错。那么你调用接口中的回滚就可以了。
好久不做开发了。详细代码没法说。也许说的不怎么对。你验证一个。当然思路基本就这样的。
B. 用存储过程实现回滚
程序功能
在SQL Server数据库中建立两个表:USER表和USERDOC表。其中USER表中存放的是注册用户的用户名和密码,USERDOC表中存放的是该注册用户的个人资料,并且以用户名为索引。下面是表USER和USERDOC的定义:
Create Table USER(userName varchar(30),userPasswd varchar(30))
Create Table USERDOC(userName varchar(30),Age int,Sex int,PhoneNumber varchar(20),Address varchar(50))
当用户请求注册时,ASP脚本先将用户名和密码插入到USER表中,然后在USERDOC表中插入用户个人信息(年龄、性别、联系电话和家庭住址等)。同时,应用程序还必须保证USER表中的每一条记录在USERDOC表中都有相应的记录。
利用ASP内置ADO组件中的Connection对象可以实现对数据库操作的事务性处理。Connection对象的部分方法如下:
●Connection.BeginTrans方法:启动一个事务;
●Connection.CommitTrans方法:完成/提交一个事务;
●Connection.RollBackTrans方法:撤消/放弃一个事务。
//启动一个事务操作
<% Conn.BeginTrans %>
<% sqlText=“Insert into USER(userName,userPasswd) values(‘” %>
<% sqlText=sqlText & request(“usrName”) & “’,‘”&request(“usrPasswd”)&“’) ” %>
<% conn.execute(sqlText) %>
<% if conn.Errors.Count>0 then %>
<% conn.Errors.Clear %>
//如果插入数据操作失败,则事务向前回滚
<% conn.RollBackTrans %>
<% response.Redirct RegisterFail.html %>
<% end if %>
<% sqlText=“Insert into USERDOC(userName,Age,Sex,PhoneNumber,Address) ”%>
<% sqlText=sqlText & “values(‘”& request
(“usrName”) & “’, ” & request(“Age”) %>
<% sqlText=sqlText & “,‘” & request
(“PhoneNum”) & “’,‘” %>
<% sqlText=sqlText & request(“Address”) & “’) ” %>
//执行事务单元中的第二条插入语句
<% conn.execute(sqlText) %>
<% if conn.Errors.Count>0 then %>
<% conn.Errors.Clear %>
//如果操作失败,则事务向前回滚
<% conn.RollBackTrans %>
<% response.Redirct RegisterFail.html %>
<% end if %>
//如果整个事务操作执行正确,则提交事务
<% Conn.CommitTrans %>
//转向注册成功处理页面
<% response.Redirct RegisterOk.html %>
C. 如何在ORACLE 存储过程中设置回滚断点
学习存储过程中使用断点回滚事务时,发现目前网络上存在一个问题,那就是使用断点回滚后,都忘记了一个很重要的事情,提交事务。虽然使用了断点回滚,但是断点回滚不像rollBack或commit一样结束当前事务,而使用断点回滚只会回滚到声明断点的地方,之前的产生的事务仍需要提交的,如果不提交,事务一直在数据库中缓存.
Demo:
procere doSomeThing(p_number out number) as
begin
insert into t_test_user_mingming(id,loginname,password,realname,type)
values(se_test_user_mingming_id.nextval,'xiaoming','1234','小明',1);
p_number := 1;
savepoint ps;--- 设置断点 ps
insert into t_test_info_mingming(id,pal,type,create_time,note)
values(se_test_info_id.nextval,'我想买台thinkPad 可以俺莫有钱',1,sysdate,'ceshi');
p_number := 2;
savepoint sp;----设置断点 sp
insert into t_test_agent(agent_id) values(1);---我这里此行会抛出异常 ORA-01400 可以替换为下句 手动抛出一个异常
-----RAISE_APPLICATION_ERROR (-20004,'抛出的异常玩玩');
commit;
exception --捕获异常
when others then
rollback to ps; ---- 如果产生异常,回滚到断点 ps
p_number :=0;
commit; --- 提交事务
end doSomeThing;
这里本人做了实验,如果在异常中不加 commit 语句,使用PL/SQL测试时,异常在缓存,t_test_user_mingming 表中没有数据记录。
存储过程里的事务操作:
create or replace procere pr_mypro2(p_a in varchar2,p_b in varchar2,p_count out number)
temp varchar2(1000); /*定义临时变量*/
is
begin
select code into p_count from table1 where a=p_a; /*查询并返回值*/
temp := p_count; /*将返回值赋给临时变量*/
savepoint point1; /*保存点*/
insert into table2(a,b)values(temp,p_b); /*将临时变量值添加到新表的字段*/
savepoint point2;
insert into
exception
when others then
rollback to savepoint point1; /*异常处理,保存点下面的操作都不会被执行*/
return;
end;
保存点(SAVEPOINT)是事务处理过程中的一个标志,与回滚命令(ROLLBACK)结合使用,主要的用途是允许用户将某一段处理回滚而不必回滚整个事务。
如果定义了多个savepoint,当指定回滚到某个savepoint时,那么回滚操作将回滚这个savepoint后面的所有操作(即使后面可能标记了N个savepoint)。
例如,在一段处理中定义了五个savepoint,从第三个savepoint回滚,后面的第四、第五个标记的操作都将被回滚,如果不使用ROLLBACK TO savepoint_name而使用ROLLBACK,将会滚整个事务处理。
D. oracle中设置回滚点问题,回滚一次后这个点就没有了么
原因是因为drop是DDL语句,而oracle的rollback只支持DML语句。
所以如果你使用delete,可以回滚,但DDL的drop直接修改了数据字典,使表的数据不在数据字典中存放了,oracle就认为student不存在,也就无法回滚了。
E. sql中的存储过程里怎么写事务回滚啊
直接在存储过程结束之前添加以下代码:
EXCEPTION WHEN OTHERS THEN rollback;
解释:以上语句的意思是当出现任专何错误的时候,直接回属滚整个事务。
备注:存储过程中建议没有特殊需求的情况下,在执行结束之前不要进行commit,否则在中途提交,后面的代码保存,只能回滚到commit的位置。
F. PLSQL事务提交了,要怎么回滚
如何启动Transaction; 共有三种方式
1.自动transaction
每句statement都是一个transaction.例一个update指令更新多笔纪录, 要就全部成功, 只要失败,全部会回复原值.
2.ExplicitTransaction
以Begin Transaction开始(开启)
3.ImplicitTransaction (建议不要用)
以Set Implicit_Transaction ON
如何结束Transaction; 共有三种方式
1. COMMIT Transaction(提交)
Transaction期间的任何修改,都会保证到数据库中
2. ROLLBACK Transaction(回滚)
数据会回复Transaction前状态
3. KILL <SPID> 强迫停止, 会rollback
G. PLSQL 中只是查询命令,为什么 提交和回滚 图标也亮起来了。是哪里设置的问题吗,请哪位达人指点一下。
有些查询命令比如用到了数据库链,需要跨库,数据库不知道你是否做了对其他数据库需要提交的操作.故会提示你提交和回滚.
H. Oracle中的回滚
就三条回滚了
第二条:
INSERT INTO nn values('abc','aaa');
第三条:
INSERT INTO nn values('def','ddd');
第四条:
INSERT INTO nn values('ghi','ggg');
因为create table想回滚也回滚不了
当上边这条未提交,直接回滚的话,就相当于数据库没有写入
I. 在Access中如何回滚,请大侠指点!
ACCESS不支持事务,哪里来的回滚概念呢?根本就不是企业级的数据库啊。
J. ORACLE数据库中的回滚问题
只要你设置的回滚表空间够大,数据量多也可以回滚,主要看你分配的回滚空间。
执行的时候断电,数据库会自动回滚的。