create or replace procedure SP_DEL_USERGROUP
(
iUserGroupID number
)
as
del1 VARCHAR(20);
del2 VARCHAR(20);
del3 VARCHAR(20);
errorNum number;
begin
del1 := 'del1';
del2 := 'del2';
del3 := 'del3';
errorNum := 0;
--删除用户表中对应用户组的用户
BEGIN TRAN @del1;
delete from bmps_baseinfo_usergroup c
where c.usergroupid=iUserGroupID;
IF @@error<>0
BEGIN
SELECT errorNum:=@@error;
PRINT '出现系统错误,错误号为:'+char(@@error);
END
select @@error=0; --重置错误
--车队用户组关联表
BEGIN TRAN @del2
delete from BMPS_ASSIGN_MCUUSERGROUP b where b.usergroupid=iUserGroupID;
IF @@error<>0
BEGIN
SELECT @errorNum:=@errorNum+@@error ;
PRINT '出现系统错误,错误号为:'+char(@@error);
END
select @@error=0;
--删除对应用户组
BEGIN TRAN @del3
delete from bmps_assign_usergroup a where a.usergroupid=iUserGroupID;
IF @@error<>0
BEGIN
SELECT @errorNum:=@errorNum+@@error ;
PRINT '出现系统错误,错误号为:'+char(@@error);
END ---错误统一处理回滚
IF @errorNum<>0
BEGIN
ROLLBACK TRAN @del1;
ROLLBACK TRAN @del2;
ROLLBACK TRAN @del3;
PRINT '删除数据有误,已经回滚';
END
ELSE
BEGIN
COMMIT TRANSACTION @del1;
COMMIT TRANSACTION @del2;
COMMIT TRANSACTION @del3;
PRINT '删除数据成功';
END
end SP_DEL_USERGROUP;我这里删除三个表中指定数据,每一个删除一个事物,每次记录错误,发现三个中有一个错误都全部回滚,可是报了不少的错误。。(我这里将每次错误记录迭加最后与0比较)
莫见笑啊,各位怎么修改这段SQL,怎么优化。。
(
iUserGroupID number
)
as
del1 VARCHAR(20);
del2 VARCHAR(20);
del3 VARCHAR(20);
errorNum number;
begin
del1 := 'del1';
del2 := 'del2';
del3 := 'del3';
errorNum := 0;
--删除用户表中对应用户组的用户
BEGIN TRAN @del1;
delete from bmps_baseinfo_usergroup c
where c.usergroupid=iUserGroupID;
IF @@error<>0
BEGIN
SELECT errorNum:=@@error;
PRINT '出现系统错误,错误号为:'+char(@@error);
END
select @@error=0; --重置错误
--车队用户组关联表
BEGIN TRAN @del2
delete from BMPS_ASSIGN_MCUUSERGROUP b where b.usergroupid=iUserGroupID;
IF @@error<>0
BEGIN
SELECT @errorNum:=@errorNum+@@error ;
PRINT '出现系统错误,错误号为:'+char(@@error);
END
select @@error=0;
--删除对应用户组
BEGIN TRAN @del3
delete from bmps_assign_usergroup a where a.usergroupid=iUserGroupID;
IF @@error<>0
BEGIN
SELECT @errorNum:=@errorNum+@@error ;
PRINT '出现系统错误,错误号为:'+char(@@error);
END ---错误统一处理回滚
IF @errorNum<>0
BEGIN
ROLLBACK TRAN @del1;
ROLLBACK TRAN @del2;
ROLLBACK TRAN @del3;
PRINT '删除数据有误,已经回滚';
END
ELSE
BEGIN
COMMIT TRANSACTION @del1;
COMMIT TRANSACTION @del2;
COMMIT TRANSACTION @del3;
PRINT '删除数据成功';
END
end SP_DEL_USERGROUP;我这里删除三个表中指定数据,每一个删除一个事物,每次记录错误,发现三个中有一个错误都全部回滚,可是报了不少的错误。。(我这里将每次错误记录迭加最后与0比较)
莫见笑啊,各位怎么修改这段SQL,怎么优化。。
解决方案 »
- oracle怎么查看数据库的访问量
- 为什么这个存储过程返回的值是不正确的呢!!
- R_constraint_name请高手解释一下!!!
- 借这里湿湿的人气,问一个功能的三个问题,期待oracle高手
- 求一简单SQL
- oracle10g问题
- 请帮我看看如何提高查询速度
- jdbc 连接 oracle 出错: 必须 做为 sysdba or sysoper 连接, 在线等
- 我如何将我的ORACLE的数据库的所有创建表和视图的语法导出成一个文本文件?
- 为什么OracleOraHome9TNSListener服务总是自动停?各位帮忙!急!
- 大家好,请教个SQL的update问题,谢谢了。
- 高手进来看看,求一个sql 效率要高
下面的代码自己测试一下
CREATE OR REPLACE PROCEDURE SP_DEL_USERGROUP(iUserGroupID NUMBER) AS
v_sqlcode PLS_INTEGER;
v_sqlerrm VARCHAR2(2000);
BEGIN
--删除用户表中对应用户组的用户
DELETE FROM bmps_baseinfo_usergroup c WHERE c.usergroupid = iUserGroupID; --车队用户组关联表
DELETE FROM BMPS_ASSIGN_MCUUSERGROUP b
WHERE b.usergroupid = iUserGroupID; --删除对应用户组
DELETE FROM bmps_assign_usergroup a WHERE a.usergroupid = iUserGroupID;
COMMIT;
dbms_output.put_line('删除数据成功');
EXCEPTION
WHEN OTHERS THEN
ROLLBACK;
v_sqlcode := SQLCODE;
v_sqlerrm := SQLERRM;
dbms_output.put_line('删除数据有误,已经回滚');
dbms_output.put_line('错误号:' || v_sqlcode || ',' || '错误信息:' ||
v_sqlerrm);
END SP_DEL_USERGROUP;