在下面需要帮助!
我有具有 2 个游标的代码,从第一个游标我得到不同的值,并从第二个游标一个一个地将它们传递到第二个游标(参数化)我得到结果集,我使用 BULK COLLECT 和 FORALL 将其插入到表中。
我有一个场景,如果在第二个游标中找不到数据,则从第一个游标中获取值,然后将集合中的相同值插入表中两次。
例如:
对于 emp:1 我有两个部门 2 和 3 被插入到表中 - 完美 对于 emp 2:没有部门 - 2 和 3 再次插入 - 错误。
请帮助我,如果在第二个光标中找不到记录,我不想从集合中插入旧记录。
我在这里发现了一个问题,当我从 BULK collect stmt 中删除 LOOP 和 LIMIT 时,它工作正常,但是当我添加 LOOP 和 LIMIT 时,它会插入两次数据。
我应该使用 .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;