Я хочу написать триггер для ограничения ввода числовых значений

0

Я хочу написать триггер для ограничения пользователя для вставки числовых значений и специальных символов в поле Имя столбца.

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;
/
  • 3
    Ограничение проверки было бы намного лучшим выбором
  • 2
    @Ajay Ajay в комментарии вы упомянули mysql и phpmyadmin . Вы должны пометить свой вопрос с правильными продуктами, которые вы используете. Это поможет вам получить своевременный ответ, а также не даст людям тратить время на написание ответов, которые вам не помогут.
Теги:
plsql
triggers
check-constraints
database-trigger
constraints

2 ответа

1

Как указывало @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]+','');
  • 0
    Спасибо за ответ, но я уже попробовал проверить ограничение, но оно не работает с mysql и phpmyadmin
  • 1
    @ Хорошо, пожалуйста, но вопрос помечен Oracle , а не MySQL . Я посмотрел, что вы не plsql как это, но plsql уже подразумевает Oracle .
0

LIKE не работает с регулярными выражениями. Вы можете использовать REGEXP_LIKE

IF NOT REGEXP_LIKE ( firstname,'[0-9]' )

Для этого требования триггер не нужен, используйте ограничение CHECK для таблицы.

CREATE TABLE tempuser (
     firstname   VARCHAR2(20) CHECK (
          NOT REGEXP_LIKE ( firstname,
                            '[0-9]' )
     )
);

Также обратите внимание, что dbms_output.put_line бесполезен в триггере, вы должны либо вызвать исключение, используя RAISE_APPLICATION_ERROR либо вставить его в таблицу журналирования.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню