
我忘记了什么吗?
PROCEDURE SP_USUARIO_INSERT ( pUSU_IDUSUARIO IN OUT ENG.USU_USUARIO.USU_IDUSUARIO%TYPE,pUSU_CDUSUARIO IN ENG.USU_USUARIO.USU_CDUSUARIO%TYPE,pPES_IDPESSOA IN ENG.USU_USUARIO.PES_IDPESSOA%TYPE,pUSU_DLSENHA IN ENG.USU_USUARIO.USU_CDUSUARIO%TYPE,pUSU_DLOBSERVACAO IN ENG.USU_USUARIO.USU_DLOBSERVACAO%TYPE,pUSU_NUIP IN ENG.USU_USUARIO.USU_NUIP%TYPE,pUSU_DTCADASTRO IN ENG.USU_USUARIO.USU_DTCADASTRO%TYPE,pUSU_DTDESATIVACAO IN ENG.USU_USUARIO.USU_DTDESATIVACAO%TYPE,pUSU_DTulTIMOACESSO IN ENG.USU_USUARIO.USU_DTulTIMOACESSO%TYPE,pUSU_DLMAQUINA IN ENG.USU_USUARIO.USU_DLMAQUINA%TYPE,pUSU_STNOVO IN ENG.USU_USUARIO.USU_STNOVO%TYPE,pUSU_STATIVO IN ENG.USU_USUARIO.USU_STATIVO%TYPE )ISscreateuser Varchar(200);bUsuarioExiste Number;eUsuarioExiste Exception;BEGIN SELECT COUNT(usu_cdusuario) INTO bUsuarioExiste FROM ENG.USU_USUARIO WHERE USU_CDUSUARIO = pUSU_CDUSUARIO; IF(bUsuarioExiste > 0) THEN RAISE eUsuarioExiste; END IF; SELECT usu_seq.nextval INTO pUSU_IDUSUARIO FROM DUAL; INSERT INTO ENG.USU_USUARIO ( USU_IDUSUARIO,USU_CDUSUARIO,PES_IDPESSOA,USU_DLOBSERVACAO,USU_NUIP,USU_DTCADASTRO,USU_DTDESATIVACAO,USU_DTulTIMOACESSO,USU_DLMAQUINA,USU_STNOVO,USU_STATIVO ) VALUES ( pUSU_IDUSUARIO,pUSU_CDUSUARIO,pPES_IDPESSOA,pUSU_DLOBSERVACAO,pUSU_NUIP,sysdate,pUSU_DTDESATIVACAO,pUSU_DTulTIMOACESSO,pUSU_DLMAQUINA,pUSU_STNOVO,pUSU_STATIVO ) ; screateuser := 'CREATE USER ' || pUSU_CDUSUARIO || ' IDENTIFIED BY ' || pUSU_DLSENHA; EXECUTE IMMEDIATE screateuser; EXECUTE IMMEDIATE 'GRANT ENG_GERAL TO ' || pUSU_CDUSUARIO; COMMIT;EXCEPTION WHEN eUsuarioExiste THEN RAISE_APPliCATION_ERROR (-20001,'Usuário já existe ou possui nome inválIDo.'); RolLBACK; WHEN OTHERS THEN RAISE_APPliCATION_ERROR (-20001,sqlCODE || ': ' || sqlERRM); RolLBACK;END SP_USUARIO_INSERT;解决方法 我怀疑你正在“处理”(或更准确地说,忽略)你的异常.
create table temp (ID number);DECLARE v_str VARCHAR2(2);BEGIN INSERT INTO temp VALUES (1); v_str := '123';EXCEPTION WHEN VALUE_ERROR THEN DBMS_OUTPUT.PUT_liNE('Whoops');END;/select * from temp; 将显示该行,因为就sql层而言,该过程已成功完成(因为异常被捕获并被忽略).
可能还有其他原因,例如
>插入在过程执行之前发生,因此在语句失败时不会回滚(并且您没有显式回滚事务)>在引发异常之前,通过显式提交提交插入.
总结以上是内存溢出为你收集整理的在Oracle上回滚@存储过程全部内容,希望文章能够帮你解决在Oracle上回滚@存储过程所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)