plsql编程 异常 EXCEPTION ROLLBACK

来源:互联网 发布:cf挂源码 编辑:程序博客网 时间:2024/06/06 00:42
SELECT ID,NAME,price,stockcount FROM es_product;

--预定义异常
--实现购买商品时更新库存量
DECLARE
  V_ID          NUMBER := &ID; --接收用户输入的商品id
  V_STOCK_COUNT NUMBER; --商品库存量
BEGIN
  --查询到了商品库存量
  SELECT STOCKCOUNT INTO V_STOCK_COUNT FROM ES_PRODUCT WHERE ID = V_ID;
  --根据库存进行判断,如果库存>0,购买,反之,不能购买
  IF V_STOCK_COUNT > 0 THEN
    UPDATE ES_PRODUCT SET STOCKCOUNT = STOCKCOUNT - 1 WHERE ID = V_ID;
    COMMIT;
    DBMS_OUTPUT.PUT_LINE('商品库存已经更新!');
  ELSE
    DBMS_OUTPUT.PUT_LINE('商品库存为0,无法更新!');
  END IF;
EXCEPTION
  WHEN NO_DATA_FOUND THEN
    DBMS_OUTPUT.PUT_LINE('该商品不存在!');
    ROLLBACK;
  WHEN TOO_MANY_ROWS THEN
    DBMS_OUTPUT.PUT_LINE('该商品存在了多行!');
    ROLLBACK;
  WHEN OTHERS THEN
    DBMS_OUTPUT.PUT_LINE('发生了其他的错误!!');
    ROLLBACK;
END;

SELECT * FROM es_order
--自定义异常
--实现删除订单的功能
DECLARE
  V_ID NUMBER := &ID; --用户要删除的订单id
  E_NO_RESULT EXCEPTION; --自定义异常
  V_EXCEPTION1 CONSTANT VARCHAR2(50) := '删除的数据不成功!'; --常量:异常信息
  V_EXCEPTION2 CONSTANT VARCHAR2(50) := '发生了其他的错误!';
BEGIN
  DELETE FROM ES_ORDER WHERE ID = V_ID;
  IF SQL%NOTFOUND THEN
    RAISE E_NO_RESULT; --触发异常
  END IF;
EXCEPTION
  WHEN E_NO_RESULT THEN
    DBMS_OUTPUT.PUT_LINE(V_EXCEPTION1);
    ROLLBACK;
  WHEN OTHERS THEN
    DBMS_OUTPUT.PUT_LINE(V_EXCEPTION2);
    ROLLBACK;
END;






0 0
原创粉丝点击