mysql 存储过程简单模板

http://database.51cto.com/art/201609/516968.htm

 

存储过程排错,一般要用错误处理器。详细内容参考上方链接。

 

使用示例:

 

set GLOBAL  log_bin_trust_function_creators=true;#表示创建的存储过程或者函数对二进制日志写入无影响

 

 

##定义一个错误信息展示函数,方便存储过程展示更精确的错误信息

DELIMITER $$

CREATE FUNCTION fn_get_error()

RETURNS VARCHAR(250)

BEGIN

    DECLARE code CHAR(5) DEFAULT '00000';

    DECLARE msg TEXT;

    DECLARE errno INT;

     

    GET DIAGNOSTICS CONDITION 1 code = RETURNED_SQLSTATE,  

        errno = MYSQL_ERRNO, msg = MESSAGE_TEXT;

     

    RETURN COALESCE(CONCAT("ERROR ", errno, " (", code, "): ", msg), '-');

END

$$  

 

 

##定义相关的存储过程,可参照此模板写存储过程,对排错和维护有意义

DELIMITER $$

CREATE PROCEDURE procedure_name()

BEGIN

    DECLARE errpos int default 0;

    DECLARE EXIT HANDLER FOR SQLEXCEPTION SELECT 'SQLException encountered' as No_TLucky, errpos as Position_Error,fn_get_error() AS  Error_massage;

 

set errpos=1;/*错误位置1*/

    insert into test.test set  name='p1';

 

set errpos=2;

    insert into test.test set  name='p2';

    

set errpos=3;

    insert into test.test set  name='p3';

insert into test.test set  name=p2;

END

$$  

SQL 语句实现 系统有福田、南山、罗湖三个校区,编号分别为 FT、NS、LH;有缴费、退费、结转、转让4种操作类型,每个操作对应的编号分别为 JF、TF、JZ、ZR 需求,用户进行缴费、退费、结转、转让操作时,需要根据校区、操作类型、操作日期生成相应的编号,编号生成规则: 1、校区编号 + 操作类型编号 + yyyyMMdd + '-' + '***' 2、yyyyMMdd:代表日期格式,如20160522 3、***代表自增符号,从1开始递增,不足三位则补前导0 即每个校区,每种操作类型,都有自己的编号,且每天的编号都是从001开始, 要求:写一个存储过程或函数,来生成编号。 如: 2016-05-22 福田校区收费,第一笔收费编号为—— FTJF20160522-001,第二笔缴费编号为FTJF20160522-002,... 第10笔缴费编号为 FTJF20160522-010 福田校区转让,第一笔转让编号为—— FTZR20160522-001,第二笔转让编号为FTZR20160522-002,... 第10笔转让编号为 FTZR20160522-010 2016-05-23 福田校区收费,第一笔收费编号为—— FTJF20160523-001,第二笔缴费编号为FTJF20160523-002,... 第10笔缴费编号为 FTJF20160523-010 福田校区转让,第一笔转让编号为—— FTZR20160523-001,第二笔转让编号为FTZR20160523-002,... 第10笔转让编号为 FTZR20160523-010 考虑:后期校区可能增加,操作类型也可能增加 建议:创建 相关的校区表,存储校区、编号;操作类型表,存储操作类型、编号
©️2020 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页