0

我想创建一个简单的过程,当传递一个主键时,它将从表中删除一条记录。

我已经阅读了这个关于 SQL%NOTFOUND 的帖子。我认为该问题的解决方案是使用一个函数来检查传递的参数是否是该表的主键并返回一个布尔值。我敢肯定,这里还有更多需要注意的地方。

我应该寻找哪些其他问题或特定例外情况?

这是我的程序的基本模板:

create or replace procedure delete_employee
  ( employee_id_i in employees.employee_id%type) is
begin
  if valid_employee(employee_id_i) then
    delete from employees where employee_id = employee_id_i;
  end if;
exception
  when others then
    log_error_proc(dbms_utility.format_error_stack(),
                   dbms_utility.format_error_backtrace());
end delete_employees;
4

1 回答 1

5

您应该改用ROWCOUNT隐式游标的属性。这将从DELETE语句中返回受影响的行数,并使您不必在valid_employee函数中查询表。

create or replace procedure delete_employee
  ( employee_id_i in employees.employee_id%type) is
begin
  delete from employees where employee_id = employee_id_i;
  if SQL%ROWCOUNT == 0 then
    null; -- throw exception, write log message, return something...
  end if;
exception
  when others then
    log_error_proc(dbms_utility.format_error_stack(),
                   dbms_utility.format_error_backtrace());
end delete_employees;
于 2012-06-03T09:17:14.357 回答