首页 > 解决方案 > 我想为限制数值插入编写触发器

问题描述

我想编写触发器来限制用户在列的名称字段中插入数值和特殊字符。

CREATE TRIGGER trig_check BEFORE
     INSERT ON tempuser
     FOR EACH ROW
BEGIN
     IF :new.firstname NOT LIKE '%[0-9]%' 
     THEN
          dbms_output.put_line('INSERT ONLY ALPHABETS');
     END IF;
END;
/

标签: mysqlconstraintsdatabase-triggercheck-constraints

解决方案


正如@a_horse_with_no_name 所指出的,最好添加一个检查约束,如下所示:

alter table TAB
  add constraint CHK_NAME_WITHOUT_NUMBER
  check (not regexp_like(name,'[0-9]+'));

当然在清除包含数字的数据之后。为了达到这个目的,DML可以在上述语句之前使用以下语句DDL

update tab
   set name = regexp_replace(name,'[0-9]+','');

推荐阅读