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

Oracle控制文件如何按SCHOOL字段长度拆分加载数据到两张表

Oracle SQL*Loader 定长数据按条件分流加载控制文件实现方案

需求说明

你需要将定长入站数据按TRIM后SCHOOL字段长度分流:长度≤3的记录存入TABLE1,长度>3的存入SCHOOL字段长度为10的TABLE2,且不修改TABLE1原有结构。

核心实现思路

利用SQL*Loader的多表加载能力,配合WHEN条件判断实现行级分流,先读取SCHOOL字段原始定长内容计算修剪后长度,再匹配对应表插入。

完整控制文件代码

LOAD DATA 
APPEND
-- 匹配SCHOOL修剪后长度≤3的记录插入TABLE1
INTO TABLE TABLE1
WHEN LENGTH(TRIM(:SCHOOL_RAW)) <= 3
TRAILING NULLCOLS
(
     ROLL        POSITION(1:3)     CHAR "NVL(TRIM(:ROLL),' ')",
     NAME        POSITION(4:6)     CHAR "NVL(TRIM(:NAME),' ')",
     SCHOOL_RAW  POSITION(7:11)    CHAR, -- 临时字段:读取原始5位SCHOOL内容用于长度判断
     SCHOOL      EXPRESSION "NVL(TRIM(:SCHOOL_RAW),' ')",
     LOCATION    POSITION(12:18)   CHAR "NVL(TRIM(:LOCATION),' ')"
)
-- 匹配SCHOOL修剪后长度>3的记录插入TABLE2
INTO TABLE TABLE2
WHEN LENGTH(TRIM(:SCHOOL_RAW)) > 3
TRAILING NULLCOLS
(
     ROLL        POSITION(1:3)     CHAR "NVL(TRIM(:ROLL),' ')",
     NAME        POSITION(4:6)     CHAR "NVL(TRIM(:NAME),' ')",
     SCHOOL_RAW  POSITION(7:11)    CHAR,
     SCHOOL      EXPRESSION "NVL(TRIM(:SCHOOL_RAW),' ')",
     LOCATION    POSITION(12:18)   CHAR "NVL(TRIM(:LOCATION),' ')"
)

关键配置说明

  • 移除原控制文件中错误的FIELDS TERMINATED BY "|"配置:你的数据为定长格式,无需指定分隔符,该配置会导致定长位置解析失效。
  • 临时字段SCHOOL_RAW:仅用于读取原始定长位置7-11的内容做长度判断,不会实际插入到目标表中。
  • 双INTO TABLE+WHEN逻辑:同一行数据会依次匹配两个条件,满足对应条件则插入对应表,不会出现重复插入。
  • 所有字段显式指定POSITION:确保定长数据解析不会出现错位。

加载效果验证

执行后数据会完全符合预期:

  • TABLE1存入ROLL为100、101、104的3条记录,SCHOOL字段长度均≤3
  • TABLE2存入ROLL为102、103的2条记录,SCHOOL字段完整保留原始修剪后的内容

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 20:18:01