欢迎大家来到IT世界,在知识的湖畔探索吧!
概述
今天在用之前的一个看磁盘消耗最多的sql时居然提示了一个报错,之前明明还可以用的,报错信息如下:ORA-01476:divisor is equal to zero.
思路:
看报错很明显是ORACLE中进行除的时候出现了除数为0,加个判断条件或者decode()改写就可以了。
decode改写sql
假设是a/b,用函数decode(b,0,null,a/b) ,这样如果b为0,输出null,不为0输出a/b
SELECT * FROM (SELECT sql_fulltext AS sql, SQL_ID, decode(executions,0,null,disk_reads/executions) AS "Reads/Exec", disk_reads, executions FROM V$SQLAREA v WHERE disk_reads > 1000 ORDER BY "Reads/Exec" DESC) WHERE rownum <= 10;
欢迎大家来到IT世界,在知识的湖畔探索吧!
添加判断条件
改写成如下:
欢迎大家来到IT世界,在知识的湖畔探索吧!SELECT * FROM (SELECT sql_fulltext AS sql, SQL_ID, disk_reads/executions AS "Reads/Exec", disk_reads, executions FROM V$SQLAREA v WHERE disk_reads > 1000 and executions>0 ORDER BY "Reads/Exec" DESC) WHERE rownum <= 10;
觉得有用的朋友多帮忙转发哦!后面会分享更多devops和DBA方面的内容,感兴趣的朋友可以关注下~
免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://itzsg.com/32124.html