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

KSH脚本生成SQL树形结构异常:缺失非左分支子节点求助

KSH树形结构生成脚本问题排查与修复

问题定位

你的脚本仅能遍历根节点第一层级左侧节点的全量子节点,却遗漏了右侧节点(如示例中的1.2)的子节点,核心问题有以下几点:

  • 缺失SQL执行逻辑:脚本定义了查询子节点的Inp_OraSql,但没有执行这条SQL并将结果赋值给Out_Comentario的代码,导致后续循环的子节点数据不完整。
  • 子节点拆分逻辑隐患:set -- ${Out_Comentario}依赖$__SL作为分隔符,若SQL输出格式与该分隔符不匹配,会导致子节点无法被拆分为循环的独立参数。
  • 递归流程不规范:当前脚本的节点记录与递归调用顺序混乱,容易导致部分节点的递归触发失败。

修复步骤

  1. 补全SQL执行逻辑:调用Oracle客户端(如sqlplus)执行查询SQL,过滤掉表头、连接信息等冗余输出,将纯子节点数据赋值给Out_Comentario。
  2. 修正子节点拆分逻辑:使用换行符作为分隔符拆分SQL输出(适配sqlplus的默认输出格式),确保每个子节点都能成为循环的独立参数。
  3. 规范递归调用流程:先记录当前节点,再遍历所有子节点触发递归,保证每个节点的子节点都能被遍历。

修复后的示例代码

PRC_SECUENCIA=$1

# Oracle连接参数(请替换为实际凭据)
Inp_OraServicio=IGRI
Inp_OraUser="你的Oracle用户名"
Inp_OraPass="你的Oracle密码"

# 执行SQL获取当前节点的所有子节点,过滤冗余输出
Inp_OraSql="SELECT SECUENCIA FROM IGRI.BOL_INC_DE_RED WHERE SEC_BOLETIN_RAIZ='${PRC_SECUENCIA}' ORDER BY SECUENCIA"
Out_Comentario=$(sqlplus -s ${Inp_OraUser}/${Inp_OraPass}@${Inp_OraServicio} <<EOF
SET HEADING OFF
SET FEEDBACK OFF
SET PAGESIZE 0
${Inp_OraSql}
EXIT
EOF
)

# 用换行符拆分子节点为循环参数
IFS=$'\n'
set -- ${Out_Comentario}
IFS=$' \t\n'

# 记录当前节点到日志
print -r -- "${PRC_SECUENCIA}" >> /users/cairo/OmegaCAIRO/bin/GesOPV2/FunEntAstro/pbaFunciones/arbol.log

# 遍历所有子节点,触发递归
for __derivado in "${@}"
do
    # 跳过空行,避免无效递归
    [[ -z "${__derivado}" ]] && continue
    FunEnt_OPV_getIgriTicketDerivados_Arbol "${__derivado}"
done

额外说明

  • 请替换代码中的Oracle用户名和密码为实际信息,或使用环境变量等安全方式传递凭据。
  • 若FunEnt_OPV_getIgriTicketDerivados_Arbol是当前脚本的内部函数,需确保其逻辑与上述代码一致,否则递归流程仍会失效。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.21 07:23:10