0

zip が zipcodes テーブルにない行を更新または挿入しようとすると、「データが見つかりません」というエラーが発生しました。Validzip 変数にデフォルト値 67226 を既に割り当てているため、混乱しています。どうすればデータが見つからないのでしょうか? ありがとう。

4

3 に答える 3

0

データを挿入または更新するときに問題が発生すると思います:new.zipが、列のzipには値があります67226か?

 select zipcodes.zip 
      into validzip 
  from zipcodes 
  where (:new.zip=zipcodes.zip);

これはどういう意味:new.zip := validzip;ですか?

以下がうまくいくと思います(条件を指定する必要があるため、わかりません。条件をdefault指定しない限り、値を割り当てる方がよいでしょう)

update zipcodes set  :new.zip=67226 where zip is null
于 2016-02-06T16:37:09.700 に答える
0

トリガーは NO_DATA_FOUND 例外をキャッチし、:NEW.ZIP の値をデフォルト値に置き換える必要があります。

create or replace trigger employees_bef_ins_upd_row
before insert or update of zip on employees
for each row
declare
  validzip employees.zip%type;
begin
  select zipcodes.zip 
      into validzip 
  from zipcodes 
  where :new.zip = zipcodes.zip;
EXCEPTION
  WHEN NO_DATA_FOUND THEN
    :NEW.ZIP := 67226;
end;

これで課題は解決するはずですが、The Real World (tm) では、レビューのためにこのデザインを渡された場合は、「トリガーにビジネス ロジックがありません!」というメモを付けて返却します。ここで説明したように、ビジネス要件を強制するためにトリガーを使用しないでください。それがアプリケーション コードの目的です。

幸運を祈ります。

于 2016-02-07T02:39:06.377 に答える