DECLARE
ERROR_COUNT NUMBER;
errno number;
e_msg varchar2(50);
e_idx varchar2(20);
TYPE emp_type IS TABLE OF emp_source%ROWTYPE;
EMP_VAR emp_type;
CURSOR c1 IS SELECT * FROM emp_source;
BEGIN
OPEN c1;
loop
FETCH c1 BULK COLLECT INTO EMP_VAR;
BEGIN
FORALL i in 1 .. EMP_VAR.COUNT save exceptions
insert INTO emp_target (e_id,e_name,sal) values (EMP_VAR(i).E_ID,EMP_VAR(i).E_NAME,EMP_VAR(i).SAL);
FORALL i in 1 .. EMP_VAR.COUNT save exceptions
insert INTO department_target (dep_name) values (EMP_VAR(i).dep_name);
EXCEPTION
WHEN others THEN
ERROR_COUNT := sql%bulk_exceptions.count;
for i in 1 .. ERROR_COUNT
loop
errno := sql%bulk_exceptions(i).error_code;
e_msg := sqlerrm(-errno);
e_idx := sql%bulk_exceptions(i).error_index;
insert into emp_save_exc values(errno,e_msg,e_idx);
end loop;
END;
exit when c1%notfound;
end loop;
close c1;
commit;
END;
-3
A
回答
2
你可以把周圍的第一FORALL一個BEGIN/END塊和處理這樣的例外:
BEGIN
FORALL i in 1 .. EMP_VAR.COUNT save exceptions
insert INTO emp_target (e_id,e_name,sal) values (EMP_VAR(i).E_ID,EMP_VAR(i).E_NAME,EMP_VAR(i).SAL);
EXCEPTION
WHEN ...
END;
你也可以把每個塊成一個程序,讓你的代碼更有條理:
DECLARE
...
PROCEDURE insert_emp_target (p_emp_var emp_type) IS
BEGIN
FORALL i in 1 .. EMP_VAR.COUNT save exceptions
insert INTO emp_target (e_id,e_name,sal)
values (EMP_VAR(i).E_ID,EMP_VAR(i).E_NAME,EMP_VAR(i).SAL);
EXCEPTION
WHEN ...
END;
PROCEDURE insert_dept_target (p_emp_var emp_type) IS
...
BEGIN
OPEN c1;
loop
FETCH c1 BULK COLLECT INTO EMP_VAR;
exit when c1%notfound;
insert_emp_target (emp_var);
insert_dept_target (emp_var);
...
end loop;
close c1;
commit;
END;
相關問題
- 1. 第二個最後記錄
- 2. 發生異常時要記錄什麼?
- 3. 當發生異常時記錄什麼
- 4. Mongoid - 如何獲得第二個記錄?
- 5. 從第二列記錄中替換第一列記錄
- 6. 如何獲得第一個記錄和最後一個記錄
- 7. 只選擇第二個記錄
- 8. 倒數第二個記錄SQL查詢
- 9. 記錄第二個鍵盤事件
- 10. 爲什麼不會執行第二個scanf()執行
- 11. 記錄集中的第一條記錄爲空。爲什麼?
- 12. 選擇第一個記錄每個組
- 13. 哪一個最好:首先記錄然後執行操作或首先執行操作然後記錄它?
- 14. 如果第一個參數不是類,issubclass會引發異常
- 15. 如何兩次訂購相同的記錄集,第二個訂單獨立於第一個訂單執行?
- 16. Django Template For Loop:您如何爲第一條記錄執行操作?
- 17. ,執行一個塊並忽略但記錄異常
- 18. C#IEnumerable檢索第一個記錄
- 19. CSV只取第一個記錄
- 20. String只記錄第一個字
- 21. 刪除第一個插入的記錄
- 22. 更改第一個選擇記錄
- 23. Plone 4 - 第二個工作流的歷史記錄不會顯示在@@ historyview中
- 24. CATCH塊不會第一次執行,而是第二次執行 - 爲什麼?
- 25. PHP第二個標記不起作用,什麼錯了?
- 26. 插入排除第二個,添加現有記錄中的第一個
- 27. 水晶 - 如何指定一個特定的記錄值(通常是第一個)當有多個記錄
- 28. 異常記錄
- 29. 異常記錄
- 30. MySQL從第一個和第n個記錄獲取時間差異
請參閱http://stackoverflow.com/help/how-to-ask。我試着想象一下,如果一位同事來到我的辦公桌上面打印出來並說出標題中的字眼,我會怎麼做。我的迴應可能會很短暫而且有點尖銳。 – BriteSponge