返回顶部
首页 > 资讯 > 数据库 >从一条sql报错解决过程学习程序员查bug的思路
  • 310
分享到

从一条sql报错解决过程学习程序员查bug的思路

从一条sql报错解决过程学习程序员查bug的思路 2017-01-21 16:01:30 310人浏览 才女
摘要

从oracle迁移数据到达梦后,发现数据库默认值都丢失了。于是我想从oracle数据库将默认值查出来,在达梦数据库加回去。 于是上网查了一下,看怎么获取oracle数据库字段默认值信息,找到了这个sql。 select t.co

从一条sql报错解决过程学习程序员查bug的思路

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条件不报错,又该怎么查?

您可能感兴趣的文档:

--结束END--

本文标题: 从一条sql报错解决过程学习程序员查bug的思路

本文链接: https://lsjlt.com/news/8526.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作