为提高效率,提问时请提供以下信息,问题描述清晰可优先响应。
【DM版本】:8
【操作系统】:
【CPU】:
【问题描述】*:sql语句为:select case when lng is null or lat is null then null else DMGEO.ST_DISTANCE (DMGEO.ST_GEOMFROMTEXT(‘point (’ || lng || ’ ’ || lat || ‘)’ , 0),DMGEO.ST_GEOMFROMTEXT(‘point (113 23)’,0)) end distance from XXX
lng和lat类型都是DEC(12,8)
当lng或lat为null时,应该是直接返回null的,为什么还会报“非法的参数数据”?
解决方法:把case语句放到DMGEO.ST_GEOMFROMTEXT函数里
sql:select DMGEO.ST_DISTANCE (DMGEO.ST_GEOMFROMTEXT('point ’ || case when lng is null or lat is null then ‘empty’ else ‘(’ || lat || ’ ’ || lng || ‘)’ end , 0),DMGEO.ST_GEOMFROMTEXT(‘point (113 23)’,0)) distance from XXX
第一种:
第二种:
第三种:在第二种基础上加一个参数,正确运行
select /*+ case_when_cvt_ifun(0)*/ (case when lng is null or lat is null
then null
else
DMGEO.ST_DISTANCE (
DMGEO.ST_GEOMFROMTEXT('point (' || lng || ' ' || lat || ')' , 0),
DMGEO.ST_GEOMFROMTEXT('point (113 23)',0)
)
end) distance
from (
select 1 lng, 1 lat from dual
union all
select null, null from dual
);