トリガーの仕組みと、与えられたエクササイズで適切に書き込む方法を学びたいと思っています。私は、Oracleのバージョン4.2でSQL Developperを使用しています。トリガーオラクルの演算子LIKEを使用して文字列フォーマットを尊重する
私はこれらのフィールドを持つテーブルPERSONを持っています: 'matricule'、 'pmatricule'、 'typpers'。
「typpers」は、その人物が学生(E)、教授(P)またはその他(X)であることを示す手紙です。 'matricule'は3〜7の数字の連鎖で、 'matricule'は3〜6の数字の連鎖が続く 'p'の連鎖です。例: 'p145'、 'p123456'
テーブル「PERSON」に行を挿入するときに、「matricule」または「pmatricule」の形式が尊重されているかどうかをチェックする必要があります。
CREATE OR REPLACE TRIGGER new_matricule
BEFORE INSERT ON PERSONNE
FOR EACH ROW
DECLARE
new_pmatricule PERSONNE.pmatricule%type;
BEGIN
IF((:NEW.TYPPERS = 'P' OR :NEW.TYPPERS = 'X') AND :NEW.pmatricule NOT LIKE 'p%______') THEN
RAISE_APPLICATION_ERROR(-20100, 'pmatricule format is not good');
END IF;
END;
私のトリガーは、私が「52P」などの「pmatricule」形式を挿入しようとしている場合は動作しますが、それはまた、私はこのような「P145」として挿入しようとしていたときにアクティブになります。
私の構文が十分ではないと思っていますが、私はそれを行うための適切な構文を見つけていません。
アイデアはありますか?
おかげで、私は私のせいを見たが、私が書くしようとしていることに続く「P」である:あなたが3-6 文字を意味する場合
、あなたが面倒を使用することができます少なくとも3つの数字と最大6つの数字。 この場合、regex_like()を使わないと簡単な構文はありませんか? –
それは私が考えていた理由ですが、それはとても醜いです。しかし、あなたはその '_'を数字で置き換えることしかできないと確信していますか?あなたは '文字'と言うことができますし、文字は文字や数字です。 (二重の投稿を申し訳ありませんが、最初の回答は編集できません) –
@MbrMbr。 。 。 '_ 'は*任意の*文字を置き換えることができます。私はその点でその答えがはっきりしていると思った。 –