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

指定SQL触发器中包含字母和数字的字符串的格式,sql,database,oracle,triggers,Sql,Database,Oracle,Triggers,我实际上是在用Oracle编写触发器,我想指定一个变量的格式,但我找不到合适的语法 我有一张“人”的桌子,里面有学生和教授,他们都有一个矩阵。教授们有一个“pmatricule”,意思是一个带“p”的字符串,后面是一个由3到6个数字组成的链。示例:p456123 学生只有一个包含3到7个数字的矩阵,例如:1234567 我的触发器必须比较我想输入到表“Person”中的新矩阵,以检查它是否符合我描述的格式 有人会做这种事吗?我已经搜索了很长时间,但无论我尝试什么,我的触发器都不起作用。您可以使用

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

我有一张“人”的桌子,里面有学生和教授,他们都有一个矩阵。教授们有一个“pmatricule”,意思是一个带“p”的字符串,后面是一个由3到6个数字组成的链。示例:p456123

学生只有一个包含3到7个数字的矩阵,例如:1234567

我的触发器必须比较我想输入到表“Person”中的新矩阵,以检查它是否符合我描述的格式


有人会做这种事吗?我已经搜索了很长时间,但无论我尝试什么,我的触发器都不起作用。

您可以使用表级检查约束来执行此操作。您没有提供表描述,因此列名是猜测

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,而且效率更高。

您尝试过什么?您使用的是什么版本的Oracle?您希望使用触发器而不是更有效的约束是有原因的吗?这是一个关于触发器的练习,学习如何理解它们,以及如何使用给定问题的确切语法编写它们。我试过这样做:LIKE variable='p'+[0-9]{6},但是语法可能是错误的。谢谢你的回答。我本应该精确,但这是一个了解触发器如何工作以及如何正确编写触发器的练习。因此,我理解,在本案例中使用不相关。但是你给出的语法似乎就是我搜索的语法。我会在几个小时内试一试。