You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.04 23:54:02