oracleplsql中的for循环

oracleplsql中的for循环,sql,oracle,plsql,oracle12c,increment,Sql,Oracle,Plsql,Oracle12c,Increment,对于表employee_dep中的每个插入,我希望值I增加1 i := 1 For lh in (SELECT DISTINCT z.emp_id FROM employee z) LOOP INSERT INTO employee_dep (emp_id, emp_lfd, dep_name, dept_no) SELECT w.emp_id, i, w.dep_name, w.dep_no) FROM

对于表employee_dep中的每个插入,我希望值I增加1

i := 1
For lh in
 (SELECT DISTINCT z.emp_id
           FROM employee z)
LOOP
 INSERT INTO employee_dep
        (emp_id, emp_lfd, dep_name, dept_no)
        SELECT w.emp_id, i, w.dep_name, w.dep_no)
        FROM
          central_dep w
        where w.emp_id= lh.emp_id;
         i := i+1;
end loop;
但是如果有两行具有相同的emp_id,那么这两行的i都是相同的。 我希望我在下一行中增加1。(对于表中的每一个新插入,i将增加1)

例如。 我希望这些专栏是

emp_id emp_lfd
1111     1
1111     2
1111     3
1122     1
1122     2
1122     3
1122     4
但我现在得到的是

emp_id emp_lfd
1111     3
1111     3
1111     3
1122     4
1122     4    
1122     4
1122     4

难道你不想要一个
插入。。。选择带有
行号()的
语句


或者,如果您正在练习PL/SQL,那将是一个嵌套循环,例如

DECLARE
   i  NUMBER;
BEGIN
   i := 1;

   FOR lh IN (SELECT DISTINCT z.emp_id
                FROM employee z)
   LOOP
      FOR cur_r IN (SELECT w.emp_id, w.dep_name, w.dep_no
                      FROM central_dep w
                     WHERE w.emp_id = lh.emp_id)
      LOOP
         INSERT INTO employee_dep (emp_id,
                                   emp_lfd,
                                   dep_name,
                                   dept_no)
              VALUES (cur_r.emp_id,
                      i,
                      cur_r.dep_name,
                      cur_r.dep_no);

         i := i + 1;
      END LOOP;
   END LOOP;
END;

似乎您只需要在
INSERT
语句中使用
按emp\u id划分的
行编号()
分析函数,如

INSERT INTO employee_dep(emp_id, emp_lfd, dep_name, dept_no)
SELECT emp_id, ROW_NUMBER() OVER (PARTITION BY emp_id ORDER BY 0), dep_name, dep_no
  FROM central_dep

我已尝试在

中重新生成您的案例,使用始终作为身份生成的
列。简单得多。
INSERT INTO employee_dep(emp_id, emp_lfd, dep_name, dept_no)
SELECT emp_id, ROW_NUMBER() OVER (PARTITION BY emp_id ORDER BY 0), dep_name, dep_no
  FROM central_dep