oracle - 批量收集和插入数据两次

  显示原文与译文双语对照的内容
0 0

在下面需要帮助 !

I code游标,从第一个游标得到不同的值,一个由 2nd 游标passing我将结果集插入到一个表中,使用大容量收集和所有 FORALL 。

如果在游标中没有找到数据,那么从 1st 游标获取值( 如果在游标中没有找到相同值) 将两次插入到表格中。

例如:

对于电磁脉冲:1我有两个部门 2和 3插入到table-完美的磁脉冲第 2: 不插入任何部门- 2和 3 - 错误。

请帮助我,如果没有在 2nd 光标中找到记录,我不想从集合中插入旧记录。

在这里发现一个问题,删除循环和限制,但是当我添加循环并限制它插入数据的时候,它工作正常。

我应该使用. Delete() 方法? 哪里?

下面是示例代码


 DECLARE

 CURSOR emp_cur IS 
 SELECT DISTINCT emp_id from employee;

 CURSOR get_dept_cur(emp IN VARCHAR2) IS
 SELECT DISTINCT dept from department where dpt_emp_id=emp;

 TYPE nt_emp_metadata IS TABLE OF get_dept_cur%ROWTYPE;
 l_data_array nt_emp_metadata ;

BEGIN
 OPEN emp_cur ;

 LOOP FETCH emp_cur INTO l_emp;
 EXIT WHEN emp_cur %NOTFOUND; 

 OPEN get_dept_cur(l_emp);
 LOOP FETCH get_dept_cur BULK COLLECT INTO l_data_array LIMIT 100;
 FORALL i IN 1..l_data_array.COUNT
 INSERT INTO ABC VALUES l_data_array(i);
 EXIT WHEN get_dept_cur%NOTFOUND;
 END LOOP;
 COMMIT;
 CLOSE get_dept_cur;

 END LOOP;
 CLOSE emp_cur ;
 END;

时间: 原作者:

0 0

有什么问题你在ABC里有重复记录? 这是因为对于不同的员工,你可以拥有相同的dept 值。 如果你最终想要插入到 dept 中的emps,那么这样做将更容易:


INSERT INTO ABC
SELECT d.dept
FROM employee e
JOIN department d
ON e.dept=d.dept
GROUP BY d.dept;

记住:游标是所有邪恶的root: )

...