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

从一条sql报错解决过程学习程序员查bug的思路从oracle迁移数据到达梦后,发现数据库默认值都丢失了。于是我想从oracle数据库将默认值查出来,在达梦数据库加回去。 于是上网查了一下,看怎么获取oracle数据库字段默认值信息,找到了这个sq

从一条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拿到数据库跑时却发现有问题,报了一个错:
从一条sql报错解决过程学习程序员查bug的思路

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

于是我先尝试把where条件去掉,看还会不会报错。
从一条sql报错解决过程学习程序员查bug的思路

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

这次我一步到位,把sql简化成只有一个元素:表名
从一条sql报错解决过程学习程序员查bug的思路

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

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

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

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

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

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

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

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

发现问题后,修改好,现在可以正常查出默认值了。
从一条sql报错解决过程学习程序员查bug的思路

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

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

留一个小思考题:如果第一步删除了where条件后,发现sql不报错了。应该怎么查?
如果发现只有where条件跟select字段同时保留才报错,单独修改字段或者删除where条件不报错,又该怎么查?

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
转载请注明出处: https://daima100.com/6094.html

(0)
上一篇 2023-04-17
下一篇 2023-04-17

相关推荐

  • python汉诺塔算法具体过程(汉诺塔运用什么算法)

    python汉诺塔算法具体过程(汉诺塔运用什么算法)汉诺塔玩法如下:

    2023-11-24
    126
  • 使用pip更新Python版本

    使用pip更新Python版本Python是一种非常流行的编程语言,它不断地更新和发展,每个新版本都会带来更多的功能和性能提升。随着时间推移,旧版的Python也变得过时和不安全,因此更新Python版本是非常必要的。本文将介绍如何使用pip更新Python版本。

    2024-07-15
    48
  • Python实现RUB解析器

    Python实现RUB解析器RUB是一种文本格式描述符,它是为了HTML结构而设计的简单且可读性极强的格式。RUB文档由两部分组成:声明和标签。声明包括文件类型和版本号,标签用于表示文本的结构和格式。

    2024-02-23
    122
  • WSDL测试webservice接口记录[亲测有效]

    WSDL测试webservice接口记录[亲测有效]WSDL测试webservice接口记录 osc_sdo8al3q 2018/09/12 17:51 阅读数 104 收到一个事情,需要对接第三方API,对方给了个service,看了一下,原来是w…

    2023-04-12
    151
  • pgpool-II 用户手册[通俗易懂]

    pgpool-II 用户手册[通俗易懂]简单通俗的来讲,pgpool-II 是一个位于 PostgreSQL 服务器和 PostgreSQL 数据库客户端之间的中间件。pgpool-II主要提供负载均衡、连接池、复制、并行查询等等功能。Pg

    2023-04-27
    255
  • 探秘MongoDB聚合查询

    探秘MongoDB聚合查询MongoDB是当前最流行的NoSQL数据库之一。在许多场景下,我们经常需要使用聚合查询来对数据进行分析和统计。聚合查询在MongoDB中是非常强大和灵活的,可以通过组合多个聚合操作符,对数据进行复杂的分析和转换。本文将深入介绍MongoDB聚合查询的基本概念和高级用法,通过实例代码和详细的解释,帮助大家更好地掌握MongoDB聚合查询。

    2024-05-09
    66
  • Babelfish for PostgreSQL[亲测有效]

    Babelfish for PostgreSQL[亲测有效]Babelfish for PostgreSQL开源已快一月,不过全网还没有实践者总结。今天我们就测试看看,Babelfish到底是如何部署与使用的!

    2023-06-15
    160
  • Python计算圆周率及角度值

    Python计算圆周率及角度值Python作为一门高级编程语言,不仅仅可以用来编写各种应用程序,还具有科学计算的强大能力。在数学计算领域,Python也可以发挥其优势。本文将介绍如何使用Python计算圆周率及角度值。

    2024-03-09
    79

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注