oracle12c 视图,Oracle 12c内联视图评估

很久以前,在一个远在很远的数据库中,开发人员编写了一个查询,其中他/她依赖于编写谓词的顺序.

例如,

select x

from a, b

where NOT REGEXP_LIKE (a.column, '[^[:digit:]]')

and a.char_column = b.numeric_column;

(解释计划建议将to_number转换应用于a.char_column)

我认为不仅仅是设计这个“正常工作”(Oracle 11g).但是,在Oracle 12c中运行时,不遵循谓词的顺序,因此此查询会因无效数字异常而中断.我知道我可以尝试通过使用ORDERED_PREDICATES提示强制12c按顺序评估谓词

select /*+ ORDERED_PREDICATES +*/ x

from a, b

where NOT REGEXP_LIKE (a.column, '[^[:digit:]]')

and a.char_column = b.numeric_column

..或使用to_char转换其中一个值进行比较.缺点是to_char可能会运行一百万行.我认为以下内联视图可能是一个更好的解决方案.我保证首先评估内联视图吗?

select x

from b

inner join (

select only_rows_with_numeric_values as numeric_column

from a

where NOT REGEXP_LIKE (a.column, '[^[:digit:]]')

) c

on c.numeric_column = b.numeric_column;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值