InterBase クイック スタート:Part V - ジェネレータを作成する
提供: InterBase
InterBase クイック スタート:Part V - 応用トピック へ戻る
ジェネレータを作成および設定する
Employee
テーブルにおける社員番号をチェックして、現在の社員番号の最高値を確認することができます:SELECT emp_no FROM employee ORDER BY emp_no
上の文では、
145
が最高値であることを確認できるよう、すべての社員番号を返します。 次の文を使用すると、同じ結果をより少ない作業で取得することができます:SELECT MAX(emp_no) FROM employee
- 次の文を実行して、
emp_no_gen
というジェネレータを作成します。CREATE generator emp_no_gen
- ジェネレータを適切に使用するには、現在使用されている最高値(
145
)で初期化する必要があります:SET generator emp_no_gen TO 145
値を生成するトリガを作成する
- このセクションでは、
emp_no_gen
ジェネレータを使用するトリガset_emp_no
を定義し、 一意の連続した社員番号を生成し、それらをEmployee
テーブルに挿入します。CREATE TRIGGER set_emp_no FOR employee BEFORE INSERT AS BEGIN NEW.emp_no = gen_id ( emp_no_gen, 1 ); END
上の文では、
set_emp_no
トリガは挿入オペレーションの前に実行され、emp_no_gen
ジェネレータ上でgen_id()
関数を呼び出して、emp_no
の新しい値をインクリメント1
で作成します。 - このジェネレータをテストするには、次の文を実行します:
INSERT INTO employee (first_name, last_name, dept_no, job_code, job_grade, job_country, hire_date, salary, phone_ext) VALUES ('Reed', 'Richards', '671', 'Eng', 5, 'USA', '07/27/95', '34000', '444')
文が、
emp_no
列の値を含んでいないことは見ることができると思います。 - 次の文を使用して、挿入した行を確認します:
SELECT * FROM employee WHERE last_name = 'Richards'
社員番号は
146
です。トリガが、自動的に新しい社員に次の社員番号を割り当てています。
先に進む前に、ここで作業をコミットしましょう。