存储过程例子 易懂

BEGIN
  DECLARE proname        varchar(100); -- 存储过程名称
  DECLARE result         varchar(1); -- 执行结果
  DECLARE tablename      varchar(100); -- 表名

    -- 定义当前任务出现执行异常时 继续执行其他任务
   -- 1, EXIT: 发生错误时退出当前代码块(可能是子代码块或者main代码块)
   -- 2, CONTINUE: 发送错误时继续执行后续代码
   -- v_result = '2' 意思为出现异常时设置值为2
  DECLARE CONTINUE HANDLER FOR SQLEXCEPTION set v_result = '2';

  BEGIN
        SET proname = 'pro1';
      
    BEGIN  
   -- 设置成不自动提交事务 如果autocommit=1就是自动提交
      SET SESSION autocommit=0;
      SET tablename = 'table1';
      SET result = 1;

       -- 要模拟异常可以把这里的sql语句写错 比如把tablename写错
       -- 这里写你的主题sql语句  比如
       select * from tablename where xx=1;
       
        -- 如果出现异常 那记录错误日志 ,否则提交
      IF result = 2 THEN
        SELECT  NOW(),result; -- 调试时输出一些信息 以便观察执行了哪个分支 完成调试可以去掉
                ROLLBACK;
           -- 记录日志
           insert into tablename (xx, xx)  values (xx, xx);
        ELSE
        SELECT  result; -- 调试时输出一些信息 以便观察执行了哪个分支 完成调试可以去掉
         COMMIT;
      END IF;

      -- 设置回默认值
     set session autocommit=DEFAULT;
    END;
  END;
END

原创文章,转载请注明:http://www.cnblogs.com/langtianya/p/4778130.html

原文地址:https://www.cnblogs.com/langtianya/p/4778130.html