我想了解触发器是如何工作的以及如何在给定的练习中正确编写它们。我正在使用SQL Developer与4.2版本的Oracle。触发Oracle运算符LIKE尊重字符串格式
我有一个表人员与这些领域:'matricule','pmatricule'和'typpers'。
'typpers'是一封显示该人是学生(E),教授(P)还是其他人(X)的信。 'matricule'是一个3到7个数字的链,'matricule'是一个链'p',后面跟着一个3到6个数字的链。例如:'p145','p123456'。
我想让我的触发器检查'matricule'或'pmatricule'的格式是否有人想要在表PERSON中插入一行时。
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” A“pmatricule”的格式,但它也激活时,我想,如“P145”插入。
我认为我的语法不够好,但我找不到适当的语法来做到这一点。
有没有人有想法?
谢谢您的回答,我看到我的错,但我想要写的“P”,然后在最少3个数字和最多6个数字。 对于这种情况,没有'简单'语法(没有使用regex_like())吗? –
是的,这就是我想到的原因,但它很丑陋。但是你确定'_'只能被数字取代吗?因为你说'人物',角色可以是字母或数字。 (抱歉的双后,但我不能编辑我的第一个答案) –
@MbrMbr。 。 。 '_'可以代替*任何*字符。我认为答案在这一点上是明确的。 –