Oracle PL SQLでIf_Exists()スタイルの文を使用するソリューションを探しています。私はメンバーがgunsOwnedテーブルに所有されている新しい銃を入力しようとすると、特定のairsoft銃がgunsテーブルに存在するかどうかを確認するトリガーを作成しようとしています。銃が銃テーブルに存在しない場合は、銃がgunsOwnedテーブルに入力される前にテーブルに入力する必要があります。また、gunsOwnedのMakeとModelがMakeとModelの外部キーであるため参照整合性に違反しますGunsテーブルに表示されます。しかし、私はトリガーがコンパイルエラーで作成され続けると、私のすべての属性名が正しいので、なぜselect case文が機能していないのかわかりません。コードは次のとおりです。OracleでNOT EXISTSを使用するSELECT CASE
CREATE TRIGGER updateGuns
BEFORE INSERT ON GunsOwned
FOR EACH ROW
DECLARE
MemberAddingGun NUMBER;
NewMake VARCHAR2(30);
NewModel VARCHAR2(30);
BEGIN
MemberAddingGun := :NEW.OwnerID;
NewMake := :NEW.MakeOwned;
NewModel := :NEW.ModelOwned;
SELECT CASE gunExists
WHEN NOT EXISTS(SELECT Make, Model FROM Guns WHERE Make=NewMake AND Model=NewModel)
THEN
INSERT INTO Guns VALUES(NewMake, NewModel);
END
UPDATE Member
SET NumOfGuns = NumOfGuns+1
WHERE MemberID = MemberAddingGun;
END updateGuns;
.
RUN;
助けてもらえますか?
ありがとうございます!
これは、コンパイルエラーで作成されたトリガの警告を返しています。 Guns(Make、Model)属性が主キーを複合キーとして構成するのを参照してください。基本的には一意の言語インデックスです。 –
@AndrewY。 。 。 'END IF'はコンパイルエラーを修正するかもしれません。 –
コンパイルエラーがまだ分かりません。 v_flagが0でなければならないことがあります。存在しない場合はnullではありませんか? –