嵌套查询oracle缺点,不解一个嵌套查询报ORA-01476: divisor is equal to zero!!

作者探讨了在使用SQL查询索引列选择性时遇到的ORA-01476错误,发现问题源于嵌套查询中忽略了可能存在的NULL值导致除数为零。通过实例解析,解释了如何避免这种错误并提供解决思路。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

我希望通过如下sql查询出索引列上的选择性,可是报ORA-01476的错误

SQL> select * from

2  (

select b.table_name,a.column_name,

b.num_rows,

a.num_distinct Cardinality,

round(a.num_distinct / b.num_rows * 100, 2) selectivity

from dba_tab_col_statistics a, dba_tables b,dba_ind_columns c

where a.owner = b.owner

and b.owner = c.table_owner

and a.table_name = b.table_name

and a.column_name = c.column_name

and a.owner = 'SCOTT'

)

14  where selectivity <50;

round(a.num_distinct / b.num_rows * 100, 2) selectivity

*

ERROR at line 6:

ORA-01476: divisor is equal to zero

于是我单独运行内层的查询语句却不报任何错误

SQL> select b.table_name,a.column_name,

2         b.num_rows,

a.num_distinct Cardinality,

round(a.num_distinct / b.num_rows * 100, 2) selectivity

from dba_tab_col_statistics a, dba_tables b,dba_ind_columns c

where a.owner = b.owner

and b.owner = c.table_owner

and a.table_name = b.table_name

and a.column_name = c.column_name

10     and a.owner = 'SCOTT';

TABLE_NAME           COLUMN_NAME            NUM_ROWS CARDINALITY SELECTIVITY

-------------------- -------------------- ---------- ----------- -----------

DEPT                 DEPTNO                        4           4         100

EMP                  DEPTNO                       13           3       23.08

EMP                  EMPNO                        13          13         100

3 rows selected.

通过ora错误可以判断当b.num_rows为0时会引发此错误,可是在内层查询中并没有这些不符的数据,为什么加了一层嵌套查询后会报ora-01476错误呢,请指教?

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值