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