oracle 事务,异常学习

CREATE OR REPLACE PROCEDURE P_MOVE
  BEGIN 
   INSERT INTO TASK_HISTORY (TASK_ID,MOBILE,MESSAGE,SEND_TIME,END_TIME,STATUS,TASK_GROUP_ID,INTERFACE_ID,SPLITNUMTOTAL,TASK_PRI,CHILD_ID,BUSI_TYPE,MEG_ID)
VALUES(SMS.TASK_ID,SMS.MOBILE,SMS.MESSAGE,SMS.SEND_TIME,SYSDATE,SMS.STATUS,0,SMS.INTERFACE_ID,SMS.TOTALCOUNT,SMS.TASK_PRI,SMS.CHILD_ID,SMS.BUSI_TYPE,SMS.MSGID);
 DELETE FROM VCOM_BX_SMS_DBINTERFACE_TEMP WHERE TASK_ID = SMS.TASK_ID;  
      EXCEPTION
        WHEN OTHERS THEN
          ROLLBACK;
          RAISE;
        END;
   END LOOP;  
  COMMIT;  
END;
/

 

在以上的sql中,涉及到事务和异常

第一:当数据库或PL/SQL在运行时发生错误时,一个异常被PL/SQL运行时引擎自动抛出。异常也可以通过RAISE语句抛出
 显式抛出异常是程序员处理声明的异常的习惯用法,但RAISE不限于声明了的异常,它可以抛出任何任何异常。

 

第二:在Oracle中,oracle使用隐式事务,不需要定义事务开始,但是只有DML才会开启一个事务。也就是说Insert,Update,Delete这些都会开启一个事务,并且该事务在commit/rollback/ddl命令时会自动结束。

ORACLE的一个事务是以第一个可执行的SQL语句开始。当下列事件之一发生时结束。

1.        用户执行了COMMIT语句(提交)。
2.        用户执行了ROLLBACK语句(回滚)。
3.        用户执行了DDL语句(自动提交)。
4.        用户执行了DCL语句(自动提交)。
5.        用户正常退出SQL*PLUS(自动提交)。
6.        用户非正常退出SQL*PLUS(自动回滚)。
7.        系统崩溃,包括硬件或软件故障(自动回滚)。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值