Mysql 存储过程研发规范

合集下载

如何在MySQL中创建和管理存储过程

如何在MySQL中创建和管理存储过程

如何在MySQL中创建和管理存储过程随着数据库应用的复杂性增加,存储过程(Stored Procedures)成为了数据库开发中一个非常重要的工具。

MySQL作为一款常用的关系型数据库管理系统(RDBMS),也支持存储过程的创建和管理。

本文将介绍如何在MySQL中创建和管理存储过程,并提供一些实用的技巧和注意事项。

一、存储过程简介存储过程是一段经过预编译的SQL语句集合,它存储在数据库中,并作为数据库对象进行管理。

与传统的查询语句不同,存储过程可以包含业务逻辑、控制结构、变量和条件判断等,可以减少数据传输的开销,提高数据库的性能,并实现复杂的数据操作和业务流程。

二、创建存储过程在MySQL中创建存储过程可以使用CREATE PROCEDURE语句。

具体的语法如下:```CREATE PROCEDURE procedure_name ([parameter_list])[characteristics…]routine_body```1. procedure_name:存储过程的名称,建议使用有意义的命名。

2. parameter_list:存储过程的参数列表,可以包含输入参数、输出参数和输入输出参数。

3. characteristics:存储过程的特性,比如语言、安全性和事务管理等。

4. routine_body:存储过程的具体实现。

下面是一个简单的示例,创建一个用于查询员工信息的存储过程:```DELIMITER $$CREATE PROCEDURE GetEmployeeInfo(IN emp_id INT)BEGINSELECT * FROM employee WHERE employee_id = emp_id;END$$DELIMITER ;```上述示例中的存储过程名为GetEmployeeInfo,接收一个整型的emp_id作为输入参数。

在存储过程的实现中,使用SELECT语句查询employee表中符合条件的员工信息,并将结果返回。

MySQL的数据库设计原则和规范

MySQL的数据库设计原则和规范

MySQL的数据库设计原则和规范随着互联网的快速发展,大量的数据被生成并储存在数据库中。

作为一种开源关系型数据库管理系统,MySQL因其高性能、可靠性和易用性而受到广泛的使用和认可。

在进行MySQL数据库设计时,遵循一些设计原则和规范可以帮助提高数据库的效率和可维护性。

本文将介绍一些MySQL数据库设计的原则和规范,以帮助开发人员更好地进行数据库设计。

一、表的设计1. 表的字段命名字段命名应该具有明确的含义,并遵循一定的命名规则。

通常,字段名应以小写字母开头,并使用下划线(_)或驼峰命名法(如camelCase)作为单词间的分隔符。

避免使用保留字作为字段名。

例如,一个表示用户姓名的字段可以被命名为“user_name”。

2. 主键的设计每个表都应该有一个主键用于唯一标识表中的每一行数据。

通常情况下,自增长的整数类型(如INT)被用作主键。

主键的命名应该使用表名加上“_id”的后缀,如“user_id”。

3. 字段的数据类型选择在选择字段的数据类型时,应该根据实际需求选择最适合的数据类型。

例如,使用INT代替VARCHAR来存储一个数字字段,可以提高查询效率和节省存储空间。

4. 字段的约束在创建表时,通过添加合适的约束来保证数据的完整性和一致性。

例如,可以使用NOT NULL约束来确保字段的值不能为空,使用UNIQUE约束来确保某个字段的值在表中是唯一的。

二、索引的设计索引对于提高查询性能和加快数据检索速度至关重要。

以下是一些关于索引设计的原则和规范:1. 表的主键字段应该被索引主键字段被用作唯一标识表中的每一行数据,因此应该被索引以提高查询效率和数据检索速度。

2. 经常用于WHERE子句的字段应该被索引字段在WHERE子句中的使用频率高,应该被索引以加快数据检索速度。

例如,一个经常用于查询的用户ID字段应该被索引。

3. 不要过度索引虽然索引可以提高查询性能,但过多的索引会增加数据库的维护成本和写操作的负担。

MySQL开发规范与使用技巧总结

MySQL开发规范与使用技巧总结

MySQL开发规范与使⽤技巧总结1.命名规范1.库名、表名、字段名必须使⽤⼩写字母,并采⽤下划线分割。a)MySQL有配置参数lower_case_table_names,不可动态更改,linux系统默认为 0,即库表名以实际情况存储,⼤⼩写敏感。如果是1,以⼩写存储,⼤⼩写不敏感。如果是2,以实际情况存储,但以⼩写⽐较。

b)如果⼤⼩写混合使⽤,可能存在abc,Abc,ABC等多个表共存,容易导致混乱。 c)字段名显⽰区分⼤⼩写,但实际使⽤⽤不区分,即不可以建⽴两个名字⼀样但⼤⼩写不⼀样的字段。 d)为了统⼀规范, 库名、表名、字段名使⽤⼩写字母。2.库名、表名、字段名禁⽌超过32个字符。库名、表名、字段名⽀持最多64个字符,但为了统⼀规范、易于辨识以及减少传输量,禁⽌超过32个字符。3.使⽤INNODB存储引擎。INNODB引擎是MySQL5.5版本以后的默认引擘,⽀持事务、⾏级锁,有更好的数据恢复能⼒、更好的并发性能,同时对多核、⼤内存、SSD等硬件⽀持更好,⽀持数据热备份等,因此INNODB相⽐MyISAM有明显优势。

4.库名、表名、字段名禁⽌使⽤MySQL保留字。当库名、表名、字段名等属性含有保留字时,SQL语句必须⽤反引号引⽤属性名称,这将使得SQL语句书写、SHELL脚本中变量的转义等变得⾮⾮常复杂。

5.禁⽌使⽤分区表。分区表对分区键有严格要求;分区表在表变⼤后,执⾏⾏DDL、SHARDING、单表恢复等都变得更加困难。因此禁⽌使⽤分区表,并建议业务端⼿动SHARDING。

6.建议使⽤UNSIGNED存储⾮负数值。同样的字节数,⾮负存储的数值范围更⼤。如TINYINT有符号为 -128-127,⽆符号为0-255。7.建议使⽤INT UNSIGNED存储IPV4。⽤UNSINGED INT存储IP地址占⽤4字节,CHAR(15)则占⽤15字节。另外,计算机处理整数类型⽐字符串类型快。使⽤INTUNSIGNED⽽不是CHAR(15)来存储IPV4地址,通过MySQL函数inet_ntoa和inet_aton来进⾏转化。IPv6地址⽬前没有转化函数,需要使⽤DECIMAL或两个BIGINT来存储。

mysql存储过程标准语句

mysql存储过程标准语句

mysql存储过程标准语句MySQL存储过程标准语句是指使用MySQL数据库管理系统中存储过程的语法规范和语句格式。

存储过程是一组预编译的SQL语句集合,可以被多次调用以实现特定功能。

以下是一些标准的MySQL存储过程语句:1. 创建存储过程:```CREATE PROCEDURE procedure_name ([IN|OUT|INOUT] parameter_name data_type, ...)BEGIN-- 声明和定义存储过程的主体部分END;```2. 删除存储过程:```DROP PROCEDURE IF EXISTS procedure_name;```3. 调用存储过程:```CALL procedure_name([parameter_value, ...]);```4. 设置存储过程参数:```[IN|OUT|INOUT] parameter_name data_type```其中,IN表示输入参数,OUT表示输出参数,INOUT表示既是输入又是输出。

5. 存储过程的主体部分可以包括各种SQL语句,如SELECT、INSERT、UPDATE、DELETE等。

6. 存储过程中的控制流语句,如IF、CASE、WHILE等,可以用于进行条件判断和循环控制。

7. 存储过程可以包含局部变量的定义,用于存储过程内部的计算和操作。

8. 存储过程中可以使用异常处理语句,如DECLARE HANDLER和RESIGNAL,来处理错误和异常情况。

9. 存储过程可以使用RETURN语句返回值,用于存储过程的调用者获取结果。

10. 存储过程可以使用CURSOR来处理查询结果集,在存储过程中进行循环遍历和操作。

以上是MySQL存储过程标准语句的一些常用示例,可以根据具体需求进行使用和修改。

使用标准的语句格式和规范可以提高代码的可读性和维护性,同时也方便其他开发者理解和使用。

MySQL数据库开发规范1.3

MySQL数据库开发规范1.3

平安金融科技数据库(MySQL)开发规范作者: 简朝阳Last Updated: 25/02/14 19:30:18历史修订记录:说明⇧本规范包含平安金融科技使用MySQL 数据库时所需要遵循的所有对象设计(数据库,表,字段),所需要遵循的命名,对象设计,SQL 编写等的规范约定。

⇧所有内容都为必须严格执行的项目,执行过程中有任何疑问,请联系DBA Team 取得帮助。

概述⇧禁止明文传播数据库帐号和密码。

⇧禁止开发工程师通过应用帐号登录生产数据库。

⇧禁止应用在服务器安装MySQL客户端(可以安装开发包)。

⇧禁止开发人员在SQL中添加Hint,Hint只能由DBA审核后添加。

⇧禁止使用悲观锁定,即读锁select … for update。

⇧禁止在开发代码中使用DDL语句,比如truncate,alter table … 等。

⇧禁止DML语句的where条件中包含恒真条件(如:1=1)。

1. 命名规范总则⇧数据库对象名仅可包含小写英文字母、数字、下划线(_)三类字符,并以英文字母开头。

⇧数据库对象命名禁止使用MySQL保留字。

⇧多个单词之间用下划线(_)分隔。

⇧对象名称长度若超过限制,则使用简写/缩写命名。

1.1. 数据库命名⇧数据库以"db_"前缀+ "站点名_"前缀及其所服务的应用名称命名。

1.2. 表命名⇧所属同一模块的表必须以模块名作为前缀命名。

⇧历史数据表在原表基础上增加"_his"后缀命名。

1.3. 字段命名⇧布尔意义的字段以"_flag"作为后缀,前接动词。

如:表示逻辑删除意义的字段可命名为delete_flag。

⇧各表间相同意义的字段(如:作为连接关系的引用字段)使用相同的字段名。

1.4. 索引命名⇧唯一索引以uk_tablename_columnnames 方式命名⇧普通索引以idx_tablename_columnnames 方式命名⇧组合索引以idx_tablename_column1_column2... 方式命名示例⇧站点名:maymay⇧模块名:order ;⇧数据表:item;⇧字段组成:order_item_id,add_time,raw_update_time,c1,c2,c3,c4,c5⇧标准数据库名:db_maymay_order;⇧标准数据表名:order_item;⇧历史数据表名:order_item_his;⇧索引需求:c1唯一,c2和c3 组合索引:uk_order_item_c1, idx_order_item_c2_c3⇧字段实际意义:是否已删除;⇧标准字段名:delete_flag;⇧字段order.order_id被order_item引用;⇧order_item 表中与之对应的字段命名必须为:order_id2. 对象设计规范总则⇧所有表、字段必须添加能够清楚表示其含义的注释。

mysql存储过程写法总结

mysql存储过程写法总结

mysql存储过程写法总结MySQL存储过程是一种在MySQL数据库中定义的程序代码,可以通过简单的调用方式执行这些代码,其主要适用于较为复杂的数据库操作和数据处理过程。

本文将从存储过程的基本概念、使用场景、编写要求、注意事项以及常见应用场景等方面综合介绍MySQL存储过程的写法总结。

一、MySQL存储过程的基本概念MySQL存储过程是指可以通过简单的调用语句来执行的一组SQL语句的集合,其将多个SQL语句组合起来作为一个整体来执行,从而实现对数据库的复杂操作。

在MySQL数据库中,存储过程被定义为一个对象,其包含了数据类型、控制结构等各个方面的元素,类似于一种函数的定义和调用方式。

二、MySQL存储过程的使用场景MySQL存储过程主要应用于处理和管理较为复杂的数据操作和业务逻辑,同时也可以大大提高数据库的执行效率和安全性。

具体而言,MySQL存储过程可以应用于以下场景:1. 执行一组相对复杂的数据库操作,例如多表联合查询、数据分析和统计等。

2. 优化数据库的操作性能,通过存储过程缓存SQL语句、提前预处理和执行等方式来减少数据库的I/O操作与网络开销。

3. 统一数据库管理,通过存储过程实现数据处理的标准化和自动化。

4. 加强数据安全性,通过存储过程对数据的访问权限、安全性控制等进行限制和管理。

三、MySQL存储过程的编写要求MySQL存储过程具有较高的难度和复杂度,对编写者的技能水平和编写要求提出了较高的要求。

具体而言,MySQL存储过程的编写要求主要包括以下几个方面:1. 设计清晰明确的存储过程逻辑和流程,尽可能避免复杂的控制结构和业务逻辑。

2. 采用规范的命名规则和代码风格,提高可读性和可维护性。

3. 通过合理的参数传递、变量定义、异常处理等方式提高存储过程的稳定性和健壮性。

4. 针对不同的场景设置合适的存储过程执行方式、事务隔离级别、日志记录等策略。

四、MySQL存储过程的注意事项在编写和使用MySQL存储过程时,需要注意一些细节和问题,以确保其稳定性和正确性。

MySQL中的数据库设计与规范化

MySQL中的数据库设计与规范化数据库是现代信息系统中的关键组成部分,它承载了大量的数据,并提供数据的存储、管理和查询等功能。

在数据库系统中,数据库设计是至关重要的一环,良好的数据库设计能够提高数据的存储效率、数据的可用性以及系统的性能。

1. 引言数据库设计是指对于特定应用场景下的数据进行组织和实施的过程。

它需要考虑到数据的结构、关系、完整性以及性能等方面的问题。

MySQL 是开源的关系型数据库管理系统,具有功能强大、易用性好的特点。

在进行数据库设计的过程中,遵循规范化原则是非常重要的。

2. 规范化规范化是指将数据库中的表设计成具有较高的数据一致性和减少数据冗余的状态。

在 MySQL 中,常用的规范化方法有三范式和 BCNF 范式。

2.1 第一范式(1NF)第一范式要求每个属性都是不可再分的,即每个属性不允许再进行分割。

例如,在一个学生表中,学生姓名这个属性就不能再分割为姓和名两个属性。

2.2 第二范式(2NF)第二范式要求表中的每个非主属性完全依赖于主键,而不是依赖于主键的某个组合。

如果表中某个非主属性只依赖于部分主键,则需要将其拆分为独立的表。

例如,在一个订单表中,订单号和商品号是联合主键,订单总价只依赖于订单号,而不是依赖于订单号和商品号的组合。

2.3 第三范式(3NF)第三范式要求表中的每个非主属性都不传递依赖于主键。

如果表中的某个非主属性依赖于另一个非主属性,而不是直接依赖于主键,那么需要将其拆分为独立的表。

例如,在一个员工表中,部门描述应该拆分到独立的部门表中,而不是直接依赖于员工表。

2.4 BCNF 范式BCNF 范式是在第三范式的基础上进一步要求消除主属性和非主属性之间的依赖。

具体来说,每个属性都必须依赖于候选键的整个集合,而不是只依赖于其中的某个属性。

3. 数据库设计实践在进行数据库设计时,需要按照以下步骤进行:3.1 收集需求首先需要收集用户的需求,了解系统中需要存储和管理的数据。

上海腾科【专家点评】:MySQL开发规范

上海腾科【专家点评】MySQL开发规范大多数MySQL规范在网上也都能找得到相关的分享,在这里要分享的是个人认为比较重要的,或者容易被忽视的,以及容易被混淆的一些地方。

【本文转自mysql中文网】1、默认使用InnoDB引擎已多次呼吁过了,InnoDB适用于几乎99%的MySQL应用场景,而且在MySQL 5.7的系统表都改成InnoDB了,还有什么理由再死守MyISAM呢。

此外,频繁读写的InnoDB表,一定要使用具有自增/顺序特征的整型作为显式主键。

当然了,也不是说MyISAM就一无是处,比如之前就把MyISAM用于临时导数据数据(把数据导入MyISAM,一番处理后再入到InnoDB表)、或者一些特殊的数据统计类场景用MyISAM(大数据量下MyISAM全表顺序读取比InnoDB有明显优势)可能比较合适。

前提是,你得非常清楚MyISAM引擎的优势在哪里。

【参考】:[MySQL FAQ]系列—为什么InnoDB表要建议用自增列做主键。

2、InnoDB表行记录物理长度不超过8KBInnoDB的data page默认是16KB,基于B+Tree的特点,一个data page中需要至少存储2条记录。

因此,当实际存储长度超过8KB(尤其是TEXT/BLOB列)的大列(large column)时会引起“page-overflow存储”,类似ORACLE中的“行迁移”。

因此,如果必须使用大列(尤其是TEXT/BLOB类型)且读写频繁的话,则最好把这些列拆分到子表中,不要和主表放在一起存储。

如果不太频繁,可以考虑继续保留在主表中。

当然了,如果将innodb_page_size 选项修改成8KB,那么行记录物理长度建议不超过4KB。

【参考】:[MySQL优化案例]系列—优化InnoDB表BLOB列的存储效率。

3、是否使用表分区(partition)在一些使用表分区后明显可以提升性能或者运维便利性的场景下,还是建议使用表分区。

阿里MYSQL开发规范(嵩山版)

阿⾥MYSQL开发规范(嵩⼭版)MySQL 数据库嵩⼭版2020.08.03(⼀) 建表规约1. 【强制】表达是与否概念的字段,必须使⽤ is_xxx 的⽅式命名,数据类型是 unsigned tinyint(1 表⽰是,0 表⽰否)。

说明:任何字段如果为⾮负数,必须是 unsigned。

注意:POJO 类中的任何布尔类型的变量,都不要加 is 前缀,所以,需要在<resultMap>设置从 is_xxx 到Xxx 的映射关系。

数据库表⽰是与否的值,使⽤ tinyint 类型,坚持 is_xxx 的命名⽅式是为了明确其取值含义与取值范围。

正例:表达逻辑删除的字段名 is_deleted,1 表⽰删除,0 表⽰未删除。

2. 【强制】表名、字段名必须使⽤⼩写字母或数字,禁⽌出现数字开头,禁⽌两个下划线中间只出现数字。

数据库字段名的修改代价很⼤,因为⽆法进⾏预发布,所以字段名称需要慎重考虑。

说明:MySQL 在 Windows 下不区分⼤⼩写,但在 Linux 下默认是区分⼤⼩写。

因此,数据库名、表名、字段名,都不允许出现任何⼤写字母,避免节外⽣枝。

正例:aliyun_admin,rdc_config,level3_name反例:AliyunAdmin,rdcConfig,level_3_name3. 【强制】表名不使⽤复数名词。

说明:表名应该仅仅表⽰表⾥⾯的实体内容,不应该表⽰实体数量,对应于 DO 类名也是单数形式,符合表达习惯。

4. 【强制】禁⽤保留字,如 desc、range、match、delayed 等,请参考 MySQL 官⽅保留字。

5. 【强制】主键索引名为 pk_ 字段名;唯⼀索引名为 uk _字段名;普通索引名则为 idx _字段名。

说明:pk_ 即 primary key;uk_ 即 unique key;idx_ 即 index 的简称。

6. 【强制】⼩数类型为 decimal,禁⽌使⽤ float 和 double。

MySQL数据库开发规范

MySQL数据库开发规范1. 规范背景与目的MySQL数据库与Oracle、SQL Server 等数据库相比,有其内核上的优势与劣势。

我们在使用MySQL数据库的时候需要遵循一定规范,扬长避短。

本规范旨在帮助或指导RD、QA、OP等技术人员做出适合线上业务的数据库设计。

在数据库变更和处理流程、数据库表设计、SQL编写等方面予以规范,从而为公司业务系统稳定、健康地运行提供保障。

2. 设计规范2.1 数据库设计以下所有规范会按照【高危】、【强制】、【建议】三个级别进行标注,遵守优先级从高到低。

对于不满足【高危】和【强制】两个级别的设计,DBA会强制打回要求修改。

2.1.1 库名1.【强制】库的名称必须控制在32个字符以内,相关模块的表名与表名之间尽量提现join的关系,如user表和user_login表。

2.【强制】库的名称格式:业务系统名称_子系统名,库内同一模块使用的表名尽量使用统一前缀。

3.【强制】一般分库名称命名格式是库名_编号,编号从0开始递增,比如wenan_01,以时间进行分库的名称格式是库名_时间。

4.【强制】创建数据库时必须显式指定字符集,并且字符集只能是utf8。

创建数据库SQL举例:create database db1 default character set utf8;2.1.2 表结构1.【强制】表和列的名称必须控制在32个字符以内,表名只能使用字母、数字和下划线,一律小写。

2.【建议】表名要求模块名强相关,如师资系统采用”sz”作为前缀,渠道系统采用”qd”作为前缀等。

3.【强制】创建表时必须显式指定字符集为utf8。

4.【强制】创建表时必须显式指定表存储引擎类型,如无特殊需求,一律为InnoDB。

当需要使用除InnoDB/MyISAM/Memory以外的存储引擎时,必须通过DBA审核才能在生产环境中使用。

因为Innodb表支持事务、行锁、宕机恢复、MVCC等关系型数据库重要特性,为业界使用最多的MySQL存储引擎。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

Mysql存储过程研发规范 前言 mysql数据库的错误机制比较弱,复杂的sql语句容易报错,且执行效率低下,业务逻辑不清晰,在用存储过程编写业务逻辑的时候,往往很难定位问题,以及错误sql,给研发人员带来开发上障碍。往往排除问题,需要花费比较长的时间,后期存储过程的维护交接上会存在较大的障碍。因此在做存储过程编写的时候,增加一种异常捕捉的机制,断点续跑能力,快速的错误定位,下面章节简要介绍。

存储过程编写规范 1. 过程的逻辑代码全部使用动态SQL。 2. 使用创建临时表的方式,方便后续数据问题定位。 3. 尽量不用复杂逻辑SQL关联关系,复杂的sql可以拆分成多步骤的逻辑sql。 4. 过程最后一步删除临时表。

存储过程监控函数 MAKE_ETL_LOG( IN IN_DAY integer, #当日的日志 IN IN_TCH_MOD integer, #存储过程模板实例ID IN IN_PROC_NAME VARCHAR(64), #存储过程名称 IN IN_REMARK VARCHAR(128), #存储过程功能描述 IN IN_STAFFS VARCHAR(20), #开发员工号ID IN IN_EXEC_TYPE CHAR, #执行类型 IN IN_STATE_DATE datetime) #存储过程的执行开始时间 函数功能说明:应用与开始执行存储过程的执行日志记录。

UPDATE_ETL_LOG( IN IN_DAY integer, #当日的日志 IN IN_TCH_MOD integer, #存储过程模板实例ID IN IN_RESULT integer, #存储过程执行结果 1 :成功; -N 失败(N 存储过程的步骤) IN IN_ERR_SQL VARCHAR(4000), #错误的sql语句 IN IN_STATE_DATE datetime) #记录时间 函数功能说明:记录存储过程执行完成是的状态时间。 动态sql执行函数 P_util_execute( in v_sqlvarchar(4000), # 动态sql语句。 out out_sqlvarchar(4000), # 返回错误sql语句 out _err1 int ) # 异常状态,报错后异常赋值到父过程。 函数说明:执行动态SQL的函数,配合存储过程的模板使用,。

存储过程业务逻辑编写模板

P_MODEL_TEST ( IN V_TCH_MOD integer # 存储过程的模板实例ID ) 函数说明:存储过程的模板,已经集成了日志信息。建立新的存储过程,将里面的内容拷贝到新的存储过程里。

模板结构说明: BEGIN #Routine body goes here... DECLARE _var,_err int default 0; DECLARE V_STEP integer ; DECLARE V_contint default 0; DECLARE V_RESULT integer; DECLARE V_beforestep_tablenamevarchar(50) ; DECLARE V_tablenamevarchar(50) ; DECLARE v_sql VARCHAR (4000) ; -- DECLARE v_out_sql VARCHAR (4000) ; DECLARE V_report_typevarchar(10) ; -- V_TCH_MOD integer := 2132; -- 环节模板号 DECLARE V_PROC_NAME varchar(50) default '222222222'; DECLARE V_DAY varchar(8) default date_format(CURDATE(), '%Y%m%d'); DECLARE v_b_dayvarchar(8) default date_format(CURDATE()-1, '%Y%m%d'); DECLARE CONTINUE HANDLER FOR SQLEXCEPTION, SQLWARNING, NOT FOUND set _err=1;

-- 写日志 SELECT count(RESULT),result INTO V_cont, V_STEP FROM td_s_exe_log WHERE TCH_MOD = V_TCH_MOD AND DAY = V_DAY; IF V_cont=0 then set V_STEP=0; END if; IF V_STEP = 1 THEN set V_STEP=100000; # 不能return 只能赋值方式,让程序不执行。 ELSE set V_STEP = -1 * V_STEP; -- 从出错的第N步再执行 END IF; IF _err=1 then set V_STEP = 0; -- 从来没有执行过 END if; CALL MAKE_ETL_LOG((cast(V_DAY as BINARY)), -- 日期 V_TCH_MOD, -- 环节模板号 V_PROC_NAME, -- 存储过程名, 'good', -- 备注 NULL, -- 环节管理员 '1', -- 执行类型 (1:数据加载环节 2:审核校验环节) now() -- 状态时间 ); IF _err<>1 THEN -- 判断是否出现异常,无异常则执行 SET V_RESULT = 1; IF V_RESULT >= V_STEP THEN -- 代码业务逻辑编写地方。 setv_sql='SELECT 88888; '; callP_util_execute(v_sql,@v_out_vql,_err); END IF; END IF;

IF _err<>1 THEN -- 判断是否出现异常,无异常则执行 SET V_RESULT = 2; IF V_RESULT >= V_STEP THEN -- 代码业务逻辑编写地方。 select sleep(3); END IF; END IF;

IF _err<>1 THEN -- 修改程执行成功状态 CALL UPDATE_ETL_LOG((cast(V_DAY as BINARY)), V_TCH_MOD, 1, NULL, now()); COMMIT; END IF; IF _err=1 THEN ROLLBACK; callUPDATE_ETL_LOG((cast(V_DAY as BINARY)), V_TCH_MOD, -1 * V_RESULT, @v_out_vql, # 报错的sql脚本。 now()); END IF;

END 使用说明:红色部分是业务SQL逻辑代码的编写地方。所有的逻辑需要包裹在里面。可增加逻辑步奏。 增加方式拷贝以下的脚本,SET V_RESULT = 1;代办逻辑脚本在存储过程中的第一步。 IF _err<>1 THEN -- 判断是否出现异常,无异常则执行 SET V_RESULT = 1; IF V_RESULT >= V_STEP THEN -- 代码业务逻辑编写地方。 setv_sql='SELECT 88888; '; callP_util_execute(v_sql,@v_out_vql,_err); END IF; END IF;

日志表 TD_S_EXEC_LOG 字段 类型 是否为null 说明 DAY decimal(8,0) NO 记录执行日期

TCH_MOD decimal(12,0) NO 存储过程模板ID

TCH_NAME varchar(64) YES PROC_NAME varchar(64) YES 存储过程名称

STAFF varchar(20) YES 研发人员

EXEC_TYPE char(1) YES 可忽略

TCH_ID decimal(8,0) YES 可忽略

BEGIN_TIME datetime YES 过程执行时间

END_TIME datetime YES 过程结束时间

RESULT decimal(4,0) YES 执行结构1:成功–N 第N

步失败。 ERRMSG varchar(4000) YES 错误语句

PROC_RESULT varchar(64) YES 可忽略

STAFF_ID decimal(8,0) YES 研发人员工号

PROC_DATE date YES 可忽略 说明:当result=1 表示:上图标识当日的所有的存储过程都正常执行完毕。 当Result=-4 表示:在存储过程的第四步发生执行SQL异常。 当ERRMSG 表示:单result<>1 时候,记录错误的sql语句。研发人员拿出sql定位错误。 注意,过程重新跑的时候,只要当天的模板号不变,存储过程将会中报错的步奏开始执行,直到执行完成。 如果当日的过程已经执行完了。重新执行的时候存储过程的业务逻辑代码不会被执行。

代码附件:

相关文档
最新文档