2016-11-14 10 views
1

実際にはOracleでトリガーを作成していますが、変数の形式を指定したいが、これを行うための適切な構文が見つからない。トリガーに文字と数字を含む文字列の形式を指定するSQL

私は、学生と教授を集めたテーブル「Person」を持っていて、それらのすべてには授業があります。教授は "pmatricule"を持っています。これは、 "p"の後に3〜6の数字の連鎖が続く文字列を意味します。例:p456123

学生のような3〜7の数字を持つ唯一のmatriculeいる:1234567の

私のトリガーは、それは形式を尊重するかどうかを確認するために「人」私のテーブルに入力し、私が欲しい新しいmatriculeを比較することがあります私は説明した。

誰かにこのようなことをする構文がありますか?私は長い間検索しましたが、私のトリガーは私が何をしようとしても動作していません。

+0

何を試しましたか?使用しているOracleのバージョンは何ですか?より効率的な制約ではなく、トリガーを使用する理由はありますか? –

+0

トリガーについては、トリガーを理解する方法と、特定の問題の正確な構文を記述する方法を学習する練習問題です。私はこれを試しました:LIKE変数= 'p' + [0-9] {6}ですが、構文が間違っている可能性があります –

答えて

1

これは、テーブルレベルのCHECK制約で実行できます。列の名前が推測できるように、表の説明を指定していません。

alter table person add constraint person_matricule_ck check 
    (( person_type = 'PROFESSOR' and regexp_like(matricule, '^p[0-9]{6}$')) 
    or (person_type = 'STUDENT' and regexp_like(matricule, '^[0-9]{7}$')) 
    ) 
/

制約で実行できるルールにはトリガーを使用しないでください。制約は慣習的なSQLであり、より効率的です。

+0

あなたの答えをありがとう。私は精緻化しましたが、これはトリガーがどのように機能し、どのように正しく作成するかを理解するための練習です。だから私は、この場合の使用は関係がないことを理解しています。しかし、あなたが与えた構文は、私が検索したもののようです。私は数時間で試してみる。 –

関連する問題