【发布时间】:2016-11-15 00:17:24
【问题描述】:
我正在尝试了解触发器的工作原理以及如何在给定的练习中正确编写它们。我正在使用带有 4.2 版 Oracle 的 SQL Developer。
我有一个表 PERSON,其中包含以下字段:'matricule'、'pmatricule' 和 'typpers'。
'typpers' 是一个字母,用于显示此人是学生 (E)、教授 (P) 还是其他 (X)。 'matricule' 是由 3 到 7 个数字组成的链,而 'matricule' 是一个由 'p' 后跟 3 到 6 个数字的链。示例:“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”这样的格式时它也会激活。
我认为我的语法不够好,但我没有找到合适的语法来做到这一点。
有人有想法吗?
【问题讨论】:
标签: sql database oracle triggers