Mysql存储过程的编写格式(包括异常处理操作)

CREATE DEFINER=`root`@`%` PROCEDURE `proc_procedurename`(IN `parameter1_IN` varchar(50),IN `parameter2_IN` varchar(50),OUT `result_OUT` varchar(1))
BEGIN

    -- 业务参数定义1
    -- ...
    -- 业务参数定义n

    -- 设置判断游标是否执行完成参数
    DECLARE done INTEGER DEFAULT FALSE;
    -- 将结束标志绑定到游标
    DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = TRUE;
    
    -- 设置异常处理
    DECLARE CONTINUE HANDLER FOR SQLEXCEPTION 
        GET DIAGNOSTICS CONDITION 1 
    @errno = MYSQL_ERRNO, @errmsg = MESSAGE_TEXT;
    
-- 事务开始
START TRANSACTION;      

-- 业务编写===开始===

-- ...

-- 业务编写===结束===
    
    -- 异常回滚
    IF @errno > 0 THEN    
        -- 返回执行失败信息(0:成功,1:失败)
        select '1' into result_OUT from dual;
        select concat(@errno,':',@errmsg) result_ERROR;
        ROLLBACK;    
    ELSE     
        -- 返回执行成功信息(0:成功,1:失败)
        select '0' into result_OUT from dual;
        -- 提交
        COMMIT;    
    END IF;    

END

==================================================================================

说明:

网上很多存储过程都是教大家怎样定义使用,很少涉及到异常的抛出处理,mysql存储过程的异常抛出处理比oracle的要麻烦,oracle的直接判断抛出,而mysql的还要自己手写捕捉,并且MySQL不支持存储过程的调试,不像oracle那样搞个PL/SQL然后断点就可以调试了。

关于mysql错误代码@errno可以参考下面这位仁兄的网址:https://www.cnblogs.com/joeblackzqq/p/4575938.html

本文纯粹是为了记录工作中遇到的问题与经验总结,如果你觉得有用可以直接拿来用,这只是一个存储过程的格式,不涉及业务处理 ,有需要业务处理的同学可以自行添加修改。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
MySQL 5.7存储过程中,可以使用SELECT INTO语句将查询结果存储到变量中。当查询结果为空时,SELECT INTO语句会触发异常。在存储过程中,可以通过以下方法进行SELECT INTO异常处理。 首先,我们需要定义一个异常处理程序,可以使用DECLARE语句来声明一个异常变量。例如,可以声明一个名为no_data_found的异常,用于处理SELECT INTO的异常情况。 DECLARE no_data_found CONDITION FOR SQLSTATE '02000'; 接下来,在存储过程的BEGIN和END之间编写存储过程逻辑。当执行SELECT INTO语句时,如果查询结果为空,就会触发no_data_found异常。 BEGIN -- 其他存储过程逻辑 -- 定义异常处理程序 DECLARE CONTINUE HANDLER FOR no_data_found BEGIN -- 异常处理逻辑 -- 可以使用存储过程中的其他变量或语句来处理异常 END; -- 执行SELECT INTO语句 SELECT column INTO variable FROM table WHERE condition; -- 其他存储过程逻辑 END; 在定义了异常处理程序后,当SELECT INTO语句触发异常时,程序会跳转到异常处理程序的代码块中,执行异常处理逻辑。在异常处理逻辑中,可以根据具体需求进行处理,例如设置默认值、抛出其他异常等。 需要注意的是,异常处理程序需要在存储过程中合适的位置进行定义,以确保在SELECT INTO语句执行之前生效。同时,异常处理程序也可以定义多个,用于处理不同类型的异常情况。 总之,通过在存储过程中定义异常处理程序,我们可以对SELECT INTO语句的异常情况进行处理,以保证存储过程的正常执行。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值