Технически вы, безусловно, можете ... (Для простоты я предполагаю, что pers_id
является строкой, а не числом - если это число, вы можете, конечно, преобразовать его в строку, запустить replace
и преобразовать его обратно в число в триггере)
SQL> create table foo(pers_id varchar2(10));
Table created.
SQL> create trigger replace_data
2 before insert on foo
3 for each row
4 begin
5 :new.pers_id := replace(:new.pers_id, '1', '9');
6 end;
7/
Trigger created.
SQL> insert into foo values('123abc456');
1 row created.
SQL> select * from foo;
PERS_ID
----------
923abc456
Практически, однако, требование кажется чрезвычайно странным. Наличие триггера беззвучно изменяет данные, которые вставляются, как правило, плохая идея, потому что она, как правило, делает отладку исключительно сложной. Будущие разработчики, скорее всего, будут весьма удивлены, когда данные, которые они вставляют в таблицу, не соответствуют данным, которые они видят при запросе таблицы, и вряд ли они сразу узнают, что триггер изменил данные. Если вы можете описать бизнес-проблему, которую вы пытаетесь решить, мы, скорее всего, придумаем более подходящее техническое решение.