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

Oracle PL/SQL 动态SQL实现条件拼接生成CONCAT_REL表唯一表达式

业务需求说明

现有两张业务表:

  • COND_REL:存储条件、方法及关联关系,业务侧会录入条件数据,每周都会更新CONDITION_NAME字段内容
  • CONCAT_REL:最终输出表,存储所有唯一CONDITION_NAME对应的拼接条件结果
    需要基于COND_REL表数据通过动态SQL拼接生成唯一的条件表达式存入CONCAT_REL表,无需硬编码适配每周更新的内容。
表结构详情
-- COND_REL 表结构及示例数据
CONDTION_NAME  FILD            OPERTION  VALUE      OPERND
METHOD1        SHIPMENT_MODE   =         AIRWAY     AND
METHOD1        TYP             =         BOX        OR
METHOD1        TYP             =         ENVELOPE   
METHOD2        SHIPMENT_MODE   =         RAIL_ROAD  AND
METHOD2        TYP             =         CONTAINER  AND
METHOD2        DELIVERY_PH     <>        CALL       AND
METHOD2        DELIVERY_TYP    =         HOUSE      
METHOD3        TYP             =         FRAGILE    AND
METHOD3        DELIVERY_PH     =         TEXT       OR
METHOD3        DELIVERY_TYP    =         OFFICE     
METHOD4        ACKNOWLDGE      =         YES        
-- CONCAT_REL 表预期输出结果
UNIQUE_MET  UNIQUE_EXPRESION
METHOD1     SHIPMENT_MODE = 'AIRWAY' AND TYP = 'BOX' OR TYP = 'ENVELOPE'
METHOD2     SHIPMENT_MODE = 'RAIL_ROAD' AND TYP = 'CONTAINER' AND DELIVERY_PH <> 'CALL' AND DELIVERY_TYP = 'HOUSE'        
METHOD3     TYP = 'FRAGILE' AND DELIVERY_PH = 'TEXT' OR DELIVERY_TYP = 'OFFICE'
METHOD4     ACKNOWLDGE = 'YES'
动态SQL实现方案

以下为Oracle环境实现代码,每周定时执行即可自动同步所有新增/更新的条件表达式,无需修改硬编码逻辑:

MERGE INTO CONCAT_REL tgt
USING (
  SELECT 
    CONDTION_NAME AS UNIQUE_MET,
    -- 按方法分组拼接条件,自动处理操作符、值加单引号,去掉末尾多余的逻辑符
    RTRIM(LISTAGG(FILD || ' ' || OPERTION || ' ''' || VALUE || ''' ' || NVL(OPERND, ''), ' ') 
          WITHIN GROUP (ORDER BY ROWNUM), ' AND|OR ') AS UNIQUE_EXPRESION
  FROM COND_REL
  GROUP BY CONDTION_NAME
) src
ON (tgt.UNIQUE_MET = src.UNIQUE_MET)
WHEN MATCHED THEN 
  UPDATE SET tgt.UNIQUE_EXPRESION = src.UNIQUE_EXPRESION
WHEN NOT MATCHED THEN
  INSERT (UNIQUE_MET, UNIQUE_EXPRESION) VALUES (src.UNIQUE_MET, src.UNIQUE_EXPRESION);

注意:如果需要严格按照业务录入的条件顺序拼接,将ORDER BY ROWNUM替换为ORDER BY 你的顺序字段(比如自增主键ID、排序号字段)即可;MySQL环境可将LISTAGG函数替换为GROUP_CONCAT实现相同逻辑。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 23:09:03