>-
條款三十四,避免在 SQL 語句運行與 implicit cursor 中間使用 procedure 或是 function。
像是下面的例子,這邊先刪除了一些資料,後續要用 SQL%ROWCOUNT 去判斷刪除的筆數,但中間卻調用了其它 function,以致於 SQL%ROWCOUNT 的值不如我們的預期。
CREATE PROCEDURE remove_emp_and_process (in_id IN emp.empno%TYPE)
AS
BEGIN
DELETE FROM emp
WHERE empno = in_id
RETURNING deptno INTO l_deptno;
process_department (...);
IF SQL%ROWCOUNT > 1
THEN
-- Too many rows deleted! Rollback and recover...
ROLLBACK;
END IF;
END remove_emp_and_process;
所以我們必須避免在 SQL 語句運行與 implicit cursor 中間使用 procedure 或是 function。