sp内容如下:
begin
--插入激活申请录入数据
insert into kmms.tb_acc_activ_apply
(id,
apply_man,
cust_name,
capital_account,
fund_sum_minuscule,
fund_sum_capital,
sh_stockholder,
sz_stockholder,
bank_id,
bank_assign_date,
remark,
status)
select v_apply_id,
i_user_id,
i_cust_name,
v_capital_account,
i_fund_sum_minuscule,
kmms.fc_get_dx_money(i_fund_sum_minuscule),
v_sh_stockholder,
v_sz_stockholder,
i_bank_id,
i_bank_assign_date,
i_remark,
v_status_dsp
from dual;
commit;
begin
select t.id
into v_approve_man_id
from ksmanage.tb_user t
inner join sysmanage.tb_emp_position ep on t.id = ep.user_id
inner join sysmanage.tb_user_position up on ep.position_id = up.id
inner join kmms.tb_acc_activ_apply_appr_pos ap on ap.user_pos =
ep.position_id
where up.if_trunk = v_if_trunk_no
and t.dept_id = v_dept_id_user
and ap.approve_segment = v_approve_seg1;
exception
when no_data_found then
ROLLBACK;
--员工所在营业部未设置流程1的审批人,返回提示
o_return_status := -13;
o_return_msg := '您所在营业部未设置流程1的审批人,请联系电脑部系统管理员';
return;
when too_many_rows then
rollback;
--员工所在营业部设置了多个流程1的审批人,返回提示
o_return_status := -13;
o_return_msg := '您所在营业部设置了多个流程1的审批人,请联系电脑部系统管理员';
return;
end;
select KMMS.SEQ_792006101.NEXTVAL into v_approve_id from dual;
--插入审批流程数据
insert into kmms.tb_acc_activ_apply_approve
(id,
apply_id,
approve_segment,
approve_remark,
approve_man,
set_time,
set_date,
if_end)
select v_approve_id,
v_apply_id,
v_approve_seg1,
'第一次审批',
v_approve_man_id,
to_char(sysdate, 'HH24:MI:SS'),
to_char(sysdate, 'YYYYMMDD'),
v_if_end_no
from dual;
o_return_status := 0;
o_return_msg := '添加成功!';
commit;
问题如下:
在前台录入数据时,过了第一个commit后走入“exception
when no_data_found then
ROLLBACK;
--员工所在营业部未设置流程1的审批人,返回提示
o_return_status := -13;
o_return_msg := '您所在营业部未设置流程1的审批人,请联系电脑部系统管理员';
”返回'您所在营业部未设置流程1的审批人,请联系电脑部系统管理员';
提示,但是查询了一下,发现rollback根本未起作用,第一个commit前面的表的数据还是录入成功了。
请问除了前面不用commit并且后面加入rollback这样的方法之外,如果前面加了commit有什么方法可以使得在后面出错时可将数据回滚?
在线等。
谢谢各位关注的大侠。
------解决方案--------------------
commit的数据时不能rollback的。非要想完成rollback的工作,可以再执行删除或者更新之前的操作。
------解决方案--------------------
要想回滚,只能做成一个事务,commit之后,数据被永久更改;
commit默认开启另一个事务,rollback只能回滚当前事务,以其它事务无关。
------解决方案--------------------
楼主说的功能,是嵌套事务。
SQL SERVER里有这个功能,
但ORACLE里没有。