Oracle如何使用for loop将表单条记录拆分插入多行数据
问题说明
现有源数据表单条记录采用并列字段存储多位司机信息,单条样例数据结构如下:
Driver_Name_1 Age Driver_Name_2 Age Driver_Name_3 Age Tony 35 Mark 32 (空) (空)
需要通过for循环逻辑将数据拆分写入目标表,要求每位司机对应独立一行记录。处理规则为:按序号从小到大依次校验每个Driver Name字段,字段非空时,就将该姓名和其对应的年龄作为一条记录插入目标表,字段为空则直接跳过处理下一组字段。
实现思路
核心是先把同一条记录里按序号对应的司机姓名、年龄字段配对,再循环逐组校验插入:
- 第一步从源表读取待处理的单条记录,拿到全部字段值
- 按序号把
Driver_Name_N和同序号的Age字段组成一组数据,本例中一共3组 - 用for循环遍历所有数据组:
- 若当前组的姓名字段值不为空(排除Null、空字符串情况),就执行插入操作,把当前组的姓名、年龄写入目标表
- 若当前组姓名字段为空,直接跳过,进入下一组的判断
参考实现(Python 操作数据库场景)
# 从源表查询得到的单条记录存入source_record source_record = { "Driver_Name_1": "Tony", "Age_1": 35, "Driver_Name_2": "Mark", "Age_2": 32, "Driver_Name_3": None, "Age_3": None } # 配置单条源记录最多支持的司机字段组数 max_group_num = 3 # 循环逐组处理 for idx in range(1, max_group_num + 1): current_name = source_record[f"Driver_Name_{idx}"] current_age = source_record[f"Age_{idx}"] # 校验姓名非空才执行插入 if current_name and str(current_name).strip(): # 目标表插入SQL insert_sql = """ INSERT INTO target_driver (driver_name, age) VALUES (%s, %s) """ # 实际使用时打开下方注释,传入参数执行SQL即可 # db_cursor.execute(insert_sql, (current_name, current_age)) print(f"插入记录:{current_name},{current_age}岁")
执行效果
针对给出的样例数据,最终会向目标表插入2条有效记录:
- Tony,35岁
- Mark,32岁
第3组姓名字段为空,不会生成无效空记录。
内容的提问来源于stack exchange,提问作者user3516718
相关产品推荐
相关产品推荐

