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

如何通过PL/SQL循环遍历两表实现组合数据插入hrrecords表

PL/SQL实现员工部门全配对插入HR记录方案

你需要的员工与部门全量配对(笛卡尔积规则)插入需求,通过PL/SQL双层嵌套循环即可实现,最终会生成3*3=9条目标记录,具体实现如下:

可直接运行的实现代码

默认hrrecords表存储员工与部门的关联字段为emp_id、empname、dep_id、depname,如果你的实际表字段有差异,直接替换代码中对应字段名即可:

DECLARE
  -- 游标:查询全量员工数据
  CURSOR cur_emp IS
    SELECT emp_id, empname FROM employee;
  -- 游标:查询全量部门数据
  CURSOR cur_dept IS
    SELECT dep_id, depname FROM department;
BEGIN
  -- 外层循环逐行遍历员工
  FOR emp_row IN cur_emp LOOP
    -- 内层循环逐行遍历部门,每个员工匹配所有部门
    FOR dept_row IN cur_dept LOOP
      INSERT INTO hrrecords(emp_id, empname, dep_id, depname)
      VALUES (emp_row.emp_id, emp_row.empname, dept_row.dep_id, dept_row.depname);
    END LOOP;
  END LOOP;
  -- 提交事务持久化数据
  COMMIT;
  DBMS_OUTPUT.PUT_LINE('操作完成,共插入' || SQL%ROWCOUNT || '条记录');
EXCEPTION
  WHEN OTHERS THEN
    -- 异常回滚避免脏数据
    ROLLBACK;
    DBMS_OUTPUT.PUT_LINE('插入失败,错误原因:' || SQLERRM);
END;
/

使用注意事项

  • 如果你的表字段名是带空格的emp id、dep id,需要把代码中对应字段替换为带双引号的写法,例如SELECT "emp id", empname FROM employee,插入语句的字段列表也要同步修改,否则会报字段不存在的错误。
  • 如果hrrecords表有其他非空必填字段(比如记录生成时间、操作人ID等),需要在INSERT语句中补充对应字段的赋值逻辑。
  • 代码执行完成后,可以执行SELECT COUNT(*) FROM hrrecords;校验结果,返回数值为9即符合预期。
  • 备注:如果没有强制要求PL/SQL循环,单条INSERT INTO hrrecords SELECT * FROM employee, department;的笛卡尔积查询也能实现同样效果,但你明确要求循环实现的话,上述双层嵌套游标循环的方案完全满足需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 15:57:52