如何写好上千行的 SQL 存储过程(附代码规范)-程序员宅基地

 

上千行的 SQL 代码常见,且永不过时!

 

经历了大大小小的 MIS 系统,小到几人用的协作系统,几十人用的 OA 系统,到上千人用的 MES/ERP 系统,再到百万人用的电商系统,存储过程的影子在半个世纪以来从未淡出它的战场。我们几个 SQL 老玩家经常自吹, SQL 是半衰期最长的编程语言。玩会它不用担心失业。

 

上回我们说道如何去拆一个上千行的 SQL 存储过程,提到了四大步骤:理解代码,分拆代码,改写代码和保存代码。拆过无数的代码,从上千行缩减到 2 成,也组装过无数的代码,从上百行塞成了上千行,业务所需。见过最长的 SQL 代码超 5000 行,已简无所简,那就实事求是了。人有分分合合,有生命力的代码也一样。

 

但装和拆并不是一个逆反的过程!

 

1    理解业务:

 

你不可能写出一个没有业务逻辑的代码。充分理解业务逻辑对你有两个好处:一)写出可执行的并且可扩展的代码;二)主动了解业务将有利于职业生涯升级。第一个好处肯定不言而喻,写代码写出颈椎病的程序员,不会意识不到代码的扩展性可以让你少跑多少趟医院,让你霸屏更多次王者。第二个好处可不是人人都意识到了。虽然 SQL 是最长职业生涯的编程语言,与其一起出现的 VFP 大概 90 后闻所未闻,但显然没人一辈子愿意鼓捣 CRUD 吧。玩吃鸡的同学把你的 iPhone X 放下,家里有矿没说你。

 

理解了业务你就成了整个应用生态中不可缺少的一环。信息化的目的不是写代码,最终目的就是为了利润。看二爷(邱岳)就知道这话没错。

 

2    快速实现:

 

很多朋友(包括我)有时候碰到需求,苦思冥想,想的是一口气把 SQL 从头到尾完整的,畅快淋漓的写出来。“Wow” 和漂亮的回车,就是憋着这口气的期待。

 

但现实无数次打了我的脸!

 

越是有这种想法,越是憋得时间很长才写那么一点。总觉得这里不好,那里不行,这里的变量名称写得不够爽朗,那边的 Pivot 写得不够优化。结果往往是一个上午就在那里纠结,什么都没完成。

 

你是不是也有类似的经历?不孤独

 

再说一次《巴黎评论》。村上春树、海明威、博尔赫斯,书里翻翻都是第一遍爽快的写下去了,一旦写得卡壳了怎么办,束之高阁,明儿继续。所以我后来明白的事情,大家都可以猜得到了。先把业务实现了再说,命名规则,变量申明,事务控制以及性能优化,统统先放起来。写好 CRUD 交上第一稿,存档,Over!

 

3    重构与测试:

 

如果仅仅到了第二步,就认为高枕无忧,那会死的很惨。你会成为别人口中的“猪一样的队友,坑货……”

 

《巴黎评论》中,村上春树提到他的小说经常修改 4 - 5 遍才交稿,而且编辑还需要修改。我们一遍过的 SQL 就免检了?这个时候再检查命名规则,变量申明,事务控制以及性能优化。直到满足 ACID 的最小单元的 代码块完整的归整到一个存储过程或拆解成多个可重复使用的存储过程中结束。

 

将所有的测试分支跑完测试,提交!

 

 

4    保存代码:

 

如果你的团队没有 git, SVN, TFS 这些 Source Code Version Control, 赶紧上一个。没有自动化部署工具,自己想办法整一个。到 9102 年了,别偷懒吧。

 

640

写好存储过程当然远不止这些!

写好存储过程当然远不止这些!

写好存储过程当然远不止这些!

 

分享一个最近做的脑图,掌握了这些才可以说 SQL 编码入门了

摸着你的良心,看看这个图,你都掌握了?

 

 

640?wx_fmt=png

 

640

 

猜你喜欢:

 

怎样评价一个几千行的 SQL 存储过程

20 图归纳 SQL 数据库知识点

 

640?wx_fmt=jpeg

 

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/wujiandao/article/details/87128969

智能推荐

koa-body koa2 使用 koa-body 代替 koa-bodyparser 和 koa-multer_koabody is not a function-程序员宅基地

文章浏览阅读4.6k次,点赞3次,收藏11次。koa2 使用 koa-body 代替 koa-bodyparser 和 koa-multer评论:7·阅读:22543·喜欢:7一、需求 二、koa-body 的基本使用 1、安装依赖 2、app.js 3、有用的参数 1)koa-body 的基本参数 2)formidable 的相关配置参数 4、获取文件上传后的信息 三、结果..._koabody is not a function

react withRouter_react withroter 导入-程序员宅基地

文章浏览阅读267次。高阶组件中的withRouter, 作用是将一个组件包裹进Route里面, 然后react-router的三个对象history, location, match就会被放进这个组件的props属性中.// withRouter实现原理: // 将组件包裹进 Route, 然后返回// const withRouter = () => {// return () =&..._react withroter 导入

【路径规划】基于模型预测人工势场MPAPF求解考虑复杂遭遇场景的 COLREG船舶运动规划附matlab代码_mpapf是什么-程序员宅基地

文章浏览阅读153次。船舶运动规划是海上自主水面船舶(MASS)自主航行的核心问题。本文提出了一种新的模型预测人工势场(MPAPF)运动规划方法,用于考虑避碰的复杂遭遇场景规则。建立了一个新的舰船域,其中设计了一个闭区间势场函数来表示舰船域的不可侵犯性。采用在运动规划期间具有预定义速度的 Nomoto 模型来生成符合船舶运动学的可跟随路径。为解决传统人工势场(APF)方法的局部最优问题,保证复杂遭遇场景下的避撞安全,提出了一种基于模型预测策略和人工势场的运动规划方法——MPAPF。该方法将船舶运动规划问题转化为具有包括机动性。_mpapf是什么

利用群晖搭建LEDE路由器,旁路由器_群晖旁路由leds-程序员宅基地

文章浏览阅读1.6w次,点赞2次,收藏27次。首先如果你使用的群晖只有一个网口的话,那么搭建出来的路由器是一个旁路由器,也就是说与你本身的路由器不冲突,DHCP还是使用原先的路由器进行管理,通过修改网关可以让你需要连接群晖路由服务的设备连接,或者在原主路由的网关设置中,将群晖的IP填入进去,这些后面都能看到。总体方法都是使用虚拟机,创建LEDE。关于资源分配,内存上1G是富裕很多,甚至512都很充裕,我分配的是350,具体可以根据软件中心使用..._群晖旁路由leds

ubuntu 卸载pytorch_PyTorch 深度学习【一】Ubuntu16.04 下安装 PyTorch-程序员宅基地

文章浏览阅读1.6k次。在PyTorch主页上右下角点击“Click here for previous versions of PyTorch”,如下图: 然后在弹出的界面,根据你自身装的CUDA版本去选择对应的whl文件进行下载:要用GPU的话,就要选择含cu的版本,我的电脑安装的是CUDA 8,然后我想安装在系统的Python3.5上,所以选择如下:其中cp35代表python3.5,同理,cp27就是pytho..._ubantu卸载torch

【笔记本推荐】【游戏本推荐】【办公本推荐】【设计本推荐】_原色全面屏 超薄金属机身商务笔记本 超级终端(翡冷翠)-程序员宅基地

文章浏览阅读1.4w次,点赞2次,收藏6次。(注意:建议在旗舰店、官方旗舰店、官网购买)一、游戏本 设计本、办公本推荐如下:1万及以上:华硕: RTX3070 i7 、RTX3060 i7、华为:MateBook X Pro7千及以上:华为:MateBook 14s华硕:RTX3050Ti、RTX3060 i7、RTX3060 i9、FX...飞行堡垒系列 。4、5千左右:华为:MateBook D 14、MateBook13华硕:Vivobook 360、Vivobook15、Vivobook15X i5、RTX3050 i5、FX.._原色全面屏 超薄金属机身商务笔记本 超级终端(翡冷翠)

随便推点

为什么我们从github clone下来的maven项目本地运行报错_idea github下的项目报错-程序员宅基地

文章浏览阅读226次。github上的项目clone到本地,比如是个Springboot的项目,我们用idea运行莫名其妙的报各种问题,常见的有以下异常:- java.lang.NoClassDefFoundError:xxxx- java.lang.ClassNotFoundException:xxxxx- java.lang.NoSuchMethodError:xxxx- java.lang.LinkageError:xxxx_idea github下的项目报错

CISCO ACL配置详解_cisco 查看acl匹配次数-程序员宅基地

文章浏览阅读4.9w次,点赞23次,收藏128次。什么是ACL?访问控制列表简称为ACL,访问控制列表使用包过滤技术,在路由器上读取第三层及第四层包头中的信息如源地址,目的地址,源端口,目的端口等,根据预先定义好的规则对包进行过滤,从而达到访问控制的目的。该技术初期仅在路由器上支持,近些年来已经扩展到三层交换机,部分最新的二层交换机也开始提供ACL的支持了。访问控制列表的原理对路由器接口来说有两个方向出:已经经路由器的处理,正_cisco 查看acl匹配次数

开源软件漏洞安全风险分析-程序员宅基地

文章浏览阅读4.2k次。聚焦源代码安全,网罗国内外最新资讯!作者:冯兆文、刘振慧 / 西北工业大学、中国航空工业发展研究中心一、引言2020年2月,国家信息安全漏洞共享平台(CNVD ) 发布了关于Apache..._开源组件高高危漏洞有哪些

如何构建自我的认知系统-程序员宅基地

文章浏览阅读2.3k次,点赞2次,收藏6次。谈到认知系统,题目有点大。我尽量给大家梳理清楚,并提出一些建议。我认为的认知系统分三个阶段:1、初级阶段--认知”点“形成阶段:专业知识栈;我们每个人都有自己的职业发展方向,对于技术人员来说,专业知识栈越丰富代表技术能力越强。专业知识栈主要分为两大部分:专业技能和个人软技能。专业技能主要包括基础知识(如通信、计算机、网络、编程、算法、数据库等)、技术实现能力(产品/编码/测试能力、架构..._认知系统

命名实体识别中的原始预处理文本转换为标注文本_在命名实体识别中,ann格式标记的文件,怎么转换为bem格式的txt文件-程序员宅基地

文章浏览阅读1.9k次。(一)、转换格式1.其他字转换为O2.实体首字转换为B-PRODUCT3.实体中间的字转换为I-PRODUCT4.实体尾字转换为E-PRODUCT5.单实体转换为S-PRODUCT(二)、原始预处理文本(1). annotated_src.txt-DOCSTART-本公司具有{炭黑专用油}生产能力。-DOCSTART-公司已掌握了{虾}、{鲍鱼}、{海胆}等海珍品苗的工厂化培..._在命名实体识别中,ann格式标记的文件,怎么转换为bem格式的txt文件

vue2.0 页面在华为自带浏览器里无法打开。_华为p40 打不开 vue-程序员宅基地

文章浏览阅读2.4k次。因为华为手机内置的浏览器内核版本太低!解决方案1:npm install --save -dev babel-polyfill在你的主入口文件app.js中import 'babel-polyfill'即可解决方案2: 也就是使用cdn的资源,以js的文件加入到html页面:加一个https://cdn.bootcss.com/babel-polyfill/6.23.0/polyfill.min_华为p40 打不开 vue