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

Oracle SQL多函数构建JSON时数组转为字符串的问题排查

解决Oracle SQL包中拆分函数生成JSON时数组被转为字符串的问题

问题根源

你调用返回CLOB类型的函数get_json_indicadores_op_plano(id_pr)时,Oracle会将CLOB中的JSON字符串视为普通文本,自动添加双引号转义,导致本该是JSON数组的部分变成了字符串值。

解决方案

方案1:用JSON_QUERY解析函数返回的CLOB

在主JSON生成语句中,用JSON_QUERY包裹函数调用,明确告诉Oracle这是合法的JSON内容,无需转义:

KEY 'indicadoresOperacao' VALUE JSON_QUERY(get_json_indicadores_op_plano(id_pr), '$')

'$'表示取函数返回的整个JSON内容,这样Oracle会将CLOB解析为JSON数组而非字符串。

方案2:让函数返回JSON_TYPE类型(Oracle 12cR2及以上支持)

修改函数的返回类型为JSON_TYPE,替代CLOB。Oracle会直接识别该类型为JSON,不会做字符串转义处理:

FUNCTION get_json_indicadores_op_plano(p_id_pr NUMBER) RETURN JSON_TYPE IS
  v_json JSON_TYPE;
BEGIN
  SELECT JSON_ARRAYAGG(
           JSON_OBJECT(
             'id' VALUE id,
             'indicadorConceitoSincronizado' VALUE indicador_conceito_sincronizado,
             'indicadorSincronizarConceito' VALUE indicador_sincronizar_conceito
           )
         ) INTO v_json
  FROM your_table_name
  WHERE id_pr = p_id_pr;
  RETURN v_json;
END;

主JSON生成时直接调用函数即可:

KEY 'indicadoresOperacao' VALUE get_json_indicadores_op_plano(id_pr)

注意事项

如果选择方案1,必须确保函数生成的CLOB是合法的JSON格式(比如示例中缺失的闭合}]要补全),否则JSON_QUERY会抛出语法错误。

内容的提问来源于stack exchange,提问作者Ricardo Morais

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.24 01:02:36