接触数据库这么多年,这个问题也被问了无数遍。

做过很多数据库模型设计,最近的两次:

一次是设计了四百来张表的系统,整个系统的脚本统一xml管理,其中90%的脚本都出自我手。

另一次是设计了200来张表的系统,整个团队的能力很强,我只是出了几个脚本的模板。

关于写脚本,概括起来也就三点:基础知识、业务知识、逻辑思维

基础知识

是指掌握的数据库基础理论知识,以Oracle数据库来说,包括数据库的体系架构、系统视图、常用函数、分析函数、正则表达式、隐式转换、空值理论等。

熟悉这些基础理论知识,能让你写出来的脚本简洁、漂亮,一定程度上提升脚本的性能

业务知识

是指底层的数据架构,数据对接的业务含义。数据架构不仅要了解整个系统的表架构、每张表的主键、表之间的关系、字段的含义与约束,还要了解数据在各个表之间的流转,以及,实际存放的数据是怎样的。

逻辑思维能力

就是考验你能不能在脑海中把各个表之间的关联关系画出来,针对业务需求去构建实现方法(其实不止是sql脚本、java语言、hadoop技术道理都是一样的)

谈完理论,接下来说说实践。

拿到一个功能或者提数的需求之后,怎么写sql?

跟写java代码一样:需求分析、设计、开发、测试。

不一样的是,做事的方式略有不同。

1、需求分析第一要搞清楚功能或者提数的目标,或者说你做这件事的意义何在。

很多需求拿到手的时候,只是非常简单的几个字。对方提需求的时候并不了解系统多复杂,也不关心你实现多麻烦,需求提出人的要求很简单,你把我要的东西给我就成了。

要的是什么?不就这几点嘛,这你都看不明白?

接下来做需求分析,就要搞清楚对方到底要什么,已什么样的展现形式提供更合适。谈话过程中你要结合你了解的系统功能,你了解的业务知识,准确夯定对方要表达的内容,落实成为可以从系统中获取到的东西。

如果你接触过的展现形式多,那就可以在谈需求时给对方多一些选择,尽量提供一些与对方目标偏离比较小、又能节省很多开发工作量的方案。

2、设计

写脚本的设计,与java开发的设计方式是完全迥异的,前段时间也有幸听到另一位仁兄提到过。

写脚本,第一你要清楚所需要的数据可以从哪些表(集合)中获取,表之间如何关联。

第二,希望你大学里学的集合的概念、集合运算的公理、定理还记得,如果记得,能更好的梳理思路。甚至思路不清晰的时候把他们抽象成集合,运用集合的理论去简化、验证。

第三,你要熟悉各种理论上的注意事项,比如空值,not

in会出错,为什么会出错呢?比如偷懒字符串相等不加单引号有时报错有时不报错,原因是什么?比如过滤条件加在where、join、having上的区别是什么?对效率和执行结果分别有什么影响?

3、开发

基础牢固、思路清晰、目标明确的话,开发真的是简单的不能再简单了。最近有位同事跟我一起做开发,应该深有体会,他做了一周,没做对,我做了半天,告诉他,这就是我需要的结果。

4、测试

很多人都不会测试,写完了就写完了,最多重新审一下逻辑。

正向来讲

写完一个提数脚本,最起码要确认出来的总数据量是跟期望的一样的,如果你还不清楚你的期望值,那你该好好检讨。

确认完总量,就需要检查每一列的内容,检查最基础的,要做一下group by,看看都有什么内容,分别多少条。

第三步,就是抽查,或者根据别人的成果核对。抽查就是抽单个人的记录,出来的结果是不是跟系统中的实际情况相符。

反向来讲

开发一个功能,会有各种各样的异常导致你的数据出问题。

比如,数据库中没加限制,该列可以为空,如果为空,你的程序会不会报错?

比如,入参、出参的某个参数的长度超长,输入内容超出限定范围,你的程序能不能返回友好的提示?

比如,计算量太大时,你的程序执行会怎样处理?你的计算量上限是多少?有没有跟其他人统一约定?

针对测试的经验之谈:不要只在最后一步做集成测试,把你的工作拆分成一项项逻辑简单、容易掌控、容易验证的脚本。

啰啰嗦嗦写了这么多,都是一些大白话。如果你觉得看了完全没概念,那么只能说你在数据库方面的实践经验太少。如果你觉得写的太基础,那应该是前辈了。。。

sunseawind原创,如果你喜欢,转载请注明出处。

oracle脚本如何写,怎样写sql脚本相关推荐

  1. ORACLE数据库查询锁表语句sql脚本,以及删除锁信息脚本(数据库开发ETL、DBA必备)

    ORACLE数据库查询锁表语句sql脚本,以及删除锁信息脚本(数据库开发ETL.DBA必备) 文章目录 ORACLE数据库查询锁表语句sql脚本,以及删除锁信息脚本(数据库开发ETL.DBA必备) 前 ...

  2. datagrip 导出 Oracle 数据库结构和数据到sql脚本中

    文章目录 1. 问题描述 2. 数据库右键 -- 仅对 MySQL 和 PostgreSQL 有效 1. MySQL 备份 -- mysqldump 2. PostgreSQL 备份 -- pgdum ...

  3. mysql 导入导出脚本_MySQL导入和导出sql脚本

    MySQL导入和导出sql脚本 首先,使用mysqldump命令的前提是,在Cmd中进入mysql安装目录下的bin目录下,才可以使用该命令. 我的mysql安装在E:盘,所以,首先进入bin目录下: ...

  4. mysql执行文件脚本文件_MySQL执行外部sql脚本文件的命令

    sql脚本是包含一到多个sql命令的sql语句,我们可以将这些sql脚本放在一个文本文件中(我们称之为"sql脚本文件"),然后通过相关的命令执行这个sql脚本文件.基本步骤如下: ...

  5. mysql脚本文件生成工具_SqlDataToScript(sql脚本生成工具)

    SQLServer脚本生成工具是一款用于SQLServer表生成Insert脚本的工具,可以快速的为您自动生成脚本,而且格式规范,可自动生成也可以手动生成.. 相关软件软件大小版本说明下载地址 SQL ...

  6. mysql定时sql脚本_定时执行的SQL脚本

    因为要同步一个表,所以每天要同步一次数据,但是对SQL不是精通的我,为了测试写了一段代码来测试定时功能 创建一个存储过程,是用来插数据的,没有输出和输出参数 create or replace pro ...

  7. linux执行.sql脚本 db2,DB2 如何执行sql脚本

    如果现在没有连接则你的sql种一定需要有连接的sql. 如果现在已经建立连接,且在db2=>字符下,则必须按照如下操作: db2 => quit c:/> db2 -stvf sql ...

  8. mysql 脚本导出_mysqldump导出完整sql脚本

    #导出某个数据库--结构+数据 shell>mysqldump -h192.168.161.124 -uroot -pxxxxxx --opt db_name |gzip -9 > /db ...

  9. linux mysql 写shell_Linux—编写shell脚本操作数据库执行sql

    修改数据库数据 在升级应用时,我们常常会遇到升级数据库的问题,这就涉及到sql脚本的编写. 一般我们会通过写sql脚本,然后将xxx.sql脚本放到数据库中进行source xxx.sql执行.本篇文 ...

  10. sqlplus中批量执行sql脚本(Oracle)

    假如我们有很多sql脚本,如果一个一个sql脚本文件执行显然过于麻烦,下边我们演示sql脚本批量执行. 解决方法:将需要执行的sql脚本文件的@绝对路径 存放到一个脚本文件中,然后执行这个脚本文件就可 ...

最新文章

  1. nodejs 获取文件路径_Qunar 酒店 Nodejs 覆盖率收集实践
  2. swift学习之set和get方法
  3. 这个拖后腿的“in”
  4. HTML 元素内部添加预加载
  5. 现代软件工程 - 期末评比及作业要求
  6. OpenCV--solvePnp
  7. 计算机中如何取消家长控制用户,电脑怎么设置家长控制? 家长控制功能的使用技巧...
  8. 读《JavaScript语言精粹(修订版)》心得
  9. 车险赔付率分析报告_汽车保险理赔案例分析报告.ppt
  10. 用gambit学博弈论--完全信息动态博弈-扩展式表述的博弈的纳什均衡
  11. mysql+语句+when_MySQL的CASEWHEN语句
  12. 新玺配资:板块轮动加快 多看少动均衡配置为主
  13. Primary主类和Catagory分类都存在相同事件
  14. mac重置系统_如何在Mac上重置打印系统
  15. android中倒计时计算器,死亡计算器生命倒计时下载-死亡计算器生命倒计时软件下载 v8.8.0_5577安卓网...
  16. 深入学习VMware vSphere---基础知识
  17. 2、Ubuntu介绍加环境搭建详细教程
  18. Android(Java)加载SO文件
  19. 词霸天下---词根234【-zo(o)- 动 物】
  20. mySQL 事物提交成功不等于数据保存成功

热门文章

  1. mysql伪表 dual_Oracle系列:(5)select子句
  2. spark 序列化_spark shell 配置 Kryo 序列化
  3. 【BZOJ-3730】震波 动态点分治 + 树状数组
  4. FreeBSD 配置
  5. 网站添加微信支付功能(小白填坑)
  6. 从下往上飞入的动画效果
  7. Phonegap 环境配置
  8. ASP.NET——基础 12、Request
  9. HttpWebRequest自动登录网站并获取网站内容(不包含验证码的网站)
  10. NeurIPS 2021 | 视频压缩框架DCVC:从残差编码到条件编码,建模上下文