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 に答える