Я хочу написать триггер для ограничения пользователя для вставки числовых значений и специальных символов в поле Имя столбца.
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;
/
Как указывало @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]+','');
Oracle
, а не MySQL
. Я посмотрел, что вы не plsql
как это, но plsql
уже подразумевает Oracle
.
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
либо вставить его в таблицу журналирования.