解答例 - 実習課題1 - 14.3 トリガーを用いた例
実習課題 1
以下の要求を満たすトリガーを定義しなさい。
- データの入力時にパーセンテージで入力される数値を、テーブルにはその数値を 100 で割った値を入力したい。
- テーブル及び必要となる関数は適宜定義すること。
- このトリガーの定義は PorstgreSQL 上で行うものとする。
解答例
/*
* タスク管理表 task
*
* タスク番号 task_num CHAR(4) PRIMARY KEY
* タスク名 task_name CHAR(20)
* 達成度 achievement REAL
*/
CREATE TABLE task
(
num CHAR(4) PRIMARY KEY,
name CHAR(20),
achievement REAL
);
/*
* CONVERT_FUNC()
* タスク管理表の達成度への入力値を100で割る
*/
CREATE FUNCTION CONVERT_FUNC() RETURNS TRIGGER
AS '
BEGIN
new.achievement := new.achievement / 100.0;
RETURN new;
END;
'
LANGUAGE 'plpgsql';
/*
* タスク管理表へのINSERT/UPDATEに対するTRIGGERの定義
*/
CREATE TRIGGER CONVERT_TRIG
BEFORE INSERT OR UPDATE
ON task
FOR EACH ROW
EXECUTE PROCEDURE CONVERT_FUNC();

