Khi bạn muốn xử lý cục bộ các ngoại lệ như thế này:
begin
for emp_rec in (select * from emp) loop
begin
my_proc (emp_rec);
exception
when some_exception then
log_error('Failed to process employee '||emp_rec.empno);
end;
end loop;
end;
Trong ví dụ này, trường hợp ngoại lệ được xử lý, sau đó chúng tôi tiếp tục và xử lý nhân viên tiếp theo.
Một cách sử dụng khác là khai báo các biến cục bộ có phạm vi giới hạn như sau:
declare
l_var1 integer;
-- lots of variables
begin
-- lots of lines of code
...
for emp_rec in (select * from emp) loop
declare
l_localvar integer := 0;
begin
-- Use l_localvar
...
end
end loop;
end;
Xin lưu ý bạn, việc muốn làm điều này thường là dấu hiệu cho thấy chương trình của bạn quá lớn và nên bị chia nhỏ:
declare
l_var1 integer;
-- lots of variables
...
procedure local_proc (emp_rec emp%rowtype):
l_localvar integer := 0;
begin
-- Use l_localvar
...
end
begin
-- lots of lines of code
...
for emp_rec in (select * from emp) loop
local_proc (emp_rec);
end loop;
end;