如何将apex_200100.www_flow_t_varchar2转int/char解决Apex查询报错
解决方案
错误根因
apex_string.split返回的是apex_200100.www_flow_t_varchar2集合类型,你之前的写法直接读取集合对象本身,而非集合内的元素,所以会触发数据类型不匹配报错,不需要用SUBSTR/INSTR手动解析集合结构。
推荐修复写法
用TABLE()函数将拆分返回的集合转为行数据,提取元素后转换为数值类型匹配id_fac的INT类型即可:
SELECT num_fac, id_fac FROM fac WHERE id_fac IN ( SELECT TO_NUMBER(column_value) FROM proc, TABLE(apex_string.split(id_facs, ':')) WHERE id_contract = :p50_id_contract )
语法说明
TABLE()函数会将集合类型拆分为多行结果,每行的默认列名为column_value,对应拆分得到的单个字符串值TO_NUMBER()将字符串转为数值类型,和id_fac的INT类型完全匹配,不会出现类型冲突
兼容旧版Apex写法
如果你使用的Apex版本不支持上述简写语法,可以用嵌套写法实现相同效果:
SELECT num_fac, id_fac FROM fac WHERE id_fac IN ( SELECT TO_NUMBER(t.column_value) FROM ( SELECT apex_string.split(id_facs, ':') split_result FROM proc WHERE id_contract = :p50_id_contract ) s, TABLE(s.split_result) t )
额外优化建议
如果你的id_facs字段可能存在非数字内容,可使用容错转换语法避免转换报错:
TO_NUMBER(column_value DEFAULT NULL ON CONVERSION ERROR)
内容的提问来源于stack exchange,提问作者imstuckaf
相关产品推荐
相关产品推荐

