考虑如下查询:
select * from <table_name>
where <condition1> and <condition2> and <condition3>;
假设 Oracle 执行条件(任何条件),如果不为真,则不执行其他条件。因此,如果我有其他具有逻辑错误的条件,则不会抛出它。例如:
select count(*) from dual
where 1=0 and
'stack' = SUBSTR('stackoverflow','k', 3);
Oracle 返回 0。现在去掉 1=0 条件,我们得到ORA-01722: invalid number
.
我知道 Oracle 会进行成本优化并决定条件执行的顺序。那么如何覆盖它并使其执行所有条件,以便引发错误而不是误导性输出?我们可以使用提示吗?我是提示概念的新手,所以一些例子会很棒。