为提高效率,提问时请提供以下信息,问题描述清晰可优先响应。
【DM版本】:8
【操作系统】:linux
【CPU】:64
【问题描述】*:
select
(
select
case when b.name = 'cde' then
fun_get(b.name)
else
b.name
end value
from testb b
where b.id = a.id
and b.name ='abc'
) name
from testa a。
类似这个sql,在执行的时候,报了fun_get里面的错误。按理说,不应该执行到函数里面啊。
而且将sql 改写成
select
(
select
decode( b.name , 'cde' ,fun_get(b.name), b.name) value
from testb b
where b.id = a.id
and b.name ='abc'
) name
from testa a。
改写成这个之后就不会报fun_get的错误了
应该是参数CASE_WHEN_CVT_IFUN默认值为9影响的,可以在语句select后加上hint,/*+ CASE_WHEN_CVT_IFUN(0) */ 试试。
方便把函数贴出来吗?
CREATE FUNCTION fun_get(I VARCHAR) RETURN VARCHAR AS BEGIN RETURN I||'TEST'; END;
select
(
select
case when b.name = 'cde' then
fun_get(b.name)
else
b.name
end value
) name
from TESTB b
我通过简单测试没有复现您说的问题