从oracle迁移数据到达梦后,发现数据库默认值都丢失了。于是我想从oracle数据库将默认值查出来,在达梦数据库加回去。

于是上网查了一下,看怎么获取oracle数据库字段默认值信息,找到了这个sql。

select t.column, t.data_type, t.data_length, t.nullable, t.data_default from USER_TAB_COLS t where TABLE_NAME = 'AA'

但把sql拿到数据库跑时却发现有问题,报了一个错:

粗略扫了一下报错信息,没看懂错在哪里。这跟我们平时碰上程序bug,但日志不清晰,看问题在哪是一样的。
看了一下sql,主要有三部分,select,from语句(user_tab_cols是一个视图),还有where条件,错误可能是select部分,或者user_tab_cols视图语句或者是where条件语句造成的,但不知道是哪一部分出错。

于是我先尝试把where条件去掉,看还会不会报错。

结果还是一样的错,那说明错误位置应该不在where条件里面,那继续尝试缩小范围。

这次我一步到位,把sql简化成只有一个元素:表名

发现可以查询成功,那应该在select语句里面。 看查询有多个字段,暂时不知道是哪个字段有问题,尝试删除后面一半。

这时发现问题还在,那应该是前面两个字段有问题。继续删除一个字段再试。

这时还是报错,但错误范围已经很小了。熟悉oracle的人一看就应该能知道column是关键字,这里应该是字段名写错了。(后来发现正确字段名应该是column_name)
如果这时还想不起来错误原因怎么办?——继续删减。看我下面的操作,删除别名t

删除到这里,发现还是报错,但错误提示不一样了。这时再上网查一下,关于oracle的column信息,会在百度发现很多相关内容。这时有一定编程经验的人应该肯定能回忆起来。

发现问题后,修改好,现在可以正常查出默认值了。

这里展示了一种程序员查bug的思路,就是不断减少可能导致报错的内容,直到错误不复现(或者错误发生变化),问题足够简单,可以一眼了然知道原因。

通过减少变量,逐步增加确定性,这是一种程序员查bug的思路。还有一种思路是倒过来,从一个最简的系统,逐步增加变量,最近确定问题,以后有机会再分享案例。

留一个小思考题:如果第一步删除了where条件后,发现sql不报错了。应该怎么查?

如果发现只有where条件跟select字段同时保留才报错,单独修改字段或者删除where条件不报错,又该怎么查?

从一条sql报错解决过程学习程序员查bug的思路的更多相关文章

  1. 运维与开发的开车现场之MySQL5.7创建触发器报错解决过程

    报错内容如下: ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds ...

  2. Oracle ORA 12541 报错解决过程

    Oracle 导入全库之后使用plsql登陆时报错 版本12C版本2 ORA-12541: TNS: No Listener 再oracle主机本地可以使用sqlplus 登陆,但是使用plsql无法 ...

  3. pythonmysql运行报错解决过程中遇到的其中一个报错解决文章来源

    本文章仅记录下面报错的解决文章来源:error: command 'C:\Users\Administrator\AppData\Local\Programs\Common\Micr osoft\Vi ...

  4. 数据库执行sql报错Got a packet bigger than 'max_allowed_packet' bytes及重启mysql

    准备在mysql上使用数据库A,但mysql5经过重装后,上面的数据库已丢失,只得通过之前备份的A.sql重新生成数据库A. 1.执行sql报错 在执行A.sql的过程中,出现如下错误:Got a p ...

  5. CentOS 6.5 Maven 编译 Apache Tez 0.8.3 踩坑/报错解决记录

    最近准备学习使用Tez,因此从官网下载了最新的Tez 0.8.3源码,按照安装教程编译使用.平时使用的集群环境是离线的,本打算这一次也进行离线编译,无奈一编译就开始报缺少jar包的错,即使手动下载ja ...

  6. 转 sqlplus执行sql报错:ORA-01756:

    1.sqlplus执行sql报错:ORA-01756: quoted string not properly terminated   分类: 技术         在SQLPLUS中执行SQL文件时 ...

  7. spring boot jpa 使用update 报错解决办法

    在spring boot jpa 中自定义sql,执行update操作报错解决办法: 在@Query(...)上添加 @Modifying@Transactional注解

  8. org.mybatis.spring.MyBatisSystemException: nested exception is org.apache.ibatis.exceptions.TooManyResultsException: Expected one result (or null) to be returned by selectOne(), but found: 3报错解决

    报错的原因翻译出来: 预期的一个结果(或null)返回selectOne(),但发现:3 意思就是你想得到一个结果值,但是返回了三个结果值. 一般可能测试的时候我们存了几条一样的数据,在登录时,会把同 ...

  9. sphinx :undefined reference to `libiconv' 报错解决办法

    sphinx :undefined reference to `libiconv' 报错解决办法   2013-11-30 21:45:39 安装sphinx时不停报错...郁闷在make时报错,错误 ...

随机推荐

  1. Win10 ntoskrnl.exe蓝屏解决

    主机一直用的是无线网卡,装Win10下载驱动.不管是Window10自己更新,还是通过驱动人生.驱动精灵等安装的Killer网卡驱动,均日常导致蓝屏. 状态是这样的:玩游戏蓝屏.检测系统蓝屏.清垃圾蓝 ...

  2. Learning Memory-guided Normality代码学习笔记

    Learning Memory-guided Normality代码学习笔记 记忆模块核心 Memory部分的核心在于以下定义Memory类的部分. class Memory(nn.Module): ...

  3. 【python】Leetcode每日一题-删除有序数组中的重复项2

    [python]Leetcode每日一题-删除有序数组中的重复项2 [题目描述] 给你一个有序数组 nums ,请你 原地 删除重复出现的元素,使每个元素 最多出现两次 ,返回删除后数组的新长度. 不 ...

  4. SpringMVC中<mvc:default-servlet-handler/>的作用

    问题所在:DispatcherServlet请求映射配置为"/",则Spring MVC将捕获Web容器所有的请求,包括静态资源的请求,Spring MVC会将它们当成一个普通请求 ...

  5. MySQL|一文解决主库已有数据的主从复制

    主从复制配置方案和实际的场景有很多,在之前配置了主从库都是全新的配置方案 在这一篇会配置主库存在数据,然后配置主从复制 开始之前,先分享一套MySQL教程,小白入门或者学习巩固都可以看 MySQL基础 ...

  6. Python中Socket编程server与client简单的合法性认证

    导入python自带的hmac模块对随机生成的位数32字节和自定义token进行加密处理 import osmsg = os.urandom(32)  #随机生成msgOut[4]: b"F ...

  7. 云空调来自 GitHub 的冷气——GitHub 热点速览 v.21.20

    作者:HelloGitHub-小鱼干 万物皆可上云,air-conditioner 是上周火爆小鱼干朋友圈和公众号信息流的云空调项目.第一眼的时候,你会觉得和这个云空调还挺别致的,第二眼,si~~感到 ...

  8. FFmpeg应用实践之命令查询

    0. 前言 FFmpeg 中常用的工具有三个,分别是多媒体编解码工具ffmpeg.多媒体内容分析工具ffprobe和多媒体播放器ffplay.本文介绍的指令都是与编解码工具 ffmpeg 相关的. 学 ...

  9. FreeSWITCH的安装与使用

    FreeSWITCH

  10. [Python] RPC实现

    单线程同步 使用socket传输数据 使用json序列化消息体 struct将消息编码为二进制字节串,进行网络传输 消息协议 1 // 输入 2 { 3 in: "ping", 4 ...