在触发器SQL中指定字母和数字的字符串格式

时间:2016-11-14 06:03:45

标签: sql database oracle triggers

我实际上正在用Oracle编写一个触发器,我想指定一个变量的格式,但我找不到合适的语法来做到这一点。

我有一张桌子'人',它收集了学生和教授,所有人都有一个matricule。教授有一个“pmatricule”,意思是一个字符串,其中“p”后跟一个3到6个数字的链。示例:p456123

学生只有3到7个数字的matricule,例如:1234567

我的触发器必须比较我要在我的表'Person'中输入的新matricule,以检查它是否符合我所描述的格式。

有人有语法做这样的事吗?我已经搜索了很长时间但我的触发器无法正常工作。

1 个答案:

答案 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又更高效。