フィールドInvitationを持つ表PETのトリガーを作成しようとしていて、テーブルPEOPLEのPhoneというフィールドの値に基づいてYes
またはNo
になります。電話番号がヌルでない場合、とのPETテーブルの他のフィールドのいくつかが有効な値を持ち、ヌルでない場合、Invitationフィールドの値はYes
になります。PLSQL ORACLE:トリガーによるエラー
私はそれを行うことができますが、テーブルを更新してフィールドの1つをnullに設定しようとすると、後で問題が発生し、招待フィールドの値をNo
に更新しません。だから私は、PETテーブルそのもののトリガを作ることに取り組んでいます。それは、必須フィールドがヌルでないかどうかをチェックして、招待の値を変更できるようにすることです。
しかし、PEOPLEテーブルに向かう前に、ユーザがPETテーブルにデータを入力する必要があるという問題があります。だから私のトリガーは私のテーブルのPETの中にデータを挿入しているときに値を取得できません。ここで
は、私は、トリガのためにしたものです:
create or replace trigger Phone_check
before insert or update on PETS
for each row
DECLARE
SELECT phone INTO v_phone
FROM PEOPLE
INNER JOIN Family ON PEOPLE.ID=FAMILY.ID
INNER JOIN PETS ON FAMILY.ID=PETS.ID
WHERE PETS.ID=:NEW.ID;
IF :NEW.NAME IS NOT NULL
AND :NEW.AGE IS NOT NULL
AND v_phone IS NOT NULL THEN
:NEW.INVITATION:='Yes';
ELSIF :NEW.NAME IS NULL
OR :NEW.AGE IS NULL
AND v_phone IS NULL THEN
:NEW.INVITATION:='No';
END IF;
END;
私はこのトリガに問題があるものを手に入れる:人や家族のテーブルには値がまだ存在しません。しかし、PETテーブルは最初のテーブルとされています。私はこれをどのように修正すべきですか?必要な値がすでに他のテーブル内に存在する場合にのみ、このトリガーをアクティブにする方法はありますか?私は本当に混乱しています。
*「の問題は、ユーザーが人々のテーブルに向かう前にPETテーブルにデータを入力しなければならないことである。」*それはすぐそこにあなたの問題です。あなたが[101 Dalmatians](https://en.wikipedia.org/wiki/One_Hundred_and_One_Dalmatians)をモデリングしていない限り、ペットは人に属します。 – APC
@ APCはい、私がやるべき任務は、地獄のように変です。彼らはあなたが他の何もかもの前にPETにデータを入力することを望んでいます。そして、私は実際にすべてが提供されたときに招待ステータスをyesに変更することができますが、最後にPETテーブルの必須フィールドの値を変更して設定しますそれはnullになります。招待状はまだYESのままです。条件に基づいてトリガーをアクティブにする方法はありますか? – Kim