2013-02-13 4 views
0

Возможно ли создать триггер для определенного пользователя, который заменяет символ сразу после загрузки данных в любую таблицу?Триггер для замены символа после вставки

Например, мне нужно заменить все «1» на «9» в столбце PERS_ID, когда пользователь загружает данные в таблицу.

Я полный новичок для PLSQL, поэтому я не знаю, с чего начать.

Я не уверен, могу ли я прояснить свою цель, поэтому, пожалуйста, не стесняйтесь просить разъяснений.

ответ

3

Технически вы, безусловно, можете ... (Для простоты я предполагаю, что 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 

Практически, однако, требование кажется чрезвычайно странным. Наличие триггера беззвучно изменяет данные, которые вставляются, как правило, плохая идея, потому что она, как правило, делает отладку исключительно сложной. Будущие разработчики, скорее всего, будут весьма удивлены, когда данные, которые они вставляют в таблицу, не соответствуют данным, которые они видят при запросе таблицы, и вряд ли они сразу узнают, что триггер изменил данные. Если вы можете описать бизнес-проблему, которую вы пытаетесь решить, мы, скорее всего, придумаем более подходящее техническое решение.

Смежные вопросы