我实际上正在用Oracle编写一个触发器,我想指定一个变量的格式,但我找不到合适的语法来做到这一点。
我有一张桌子'人',它收集了学生和教授,所有人都有一个matricule。教授有一个“pmatricule”,意思是一个字符串,其中“p”后跟一个3到6个数字的链。示例:p456123
学生只有3到7个数字的matricule,例如:1234567
我的触发器必须比较我要在我的表'Person'中输入的新matricule,以检查它是否符合我所描述的格式。
有人有语法做这样的事吗?我已经搜索了很长时间但我的触发器无法正常工作。
答案 0 :(得分: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又更高效。