Как насчет того, чтобы сделать это на уровне столбца?
Например:
SQL> create table test (id number, name varchar2(20));
Table created.
SQL> create or replace trigger trg_bi_test
2 before insert on test
3 for each row
4 begin
5 :new.id := seq_test.nextval;
6 end;
7 /
Trigger created.
SQL> insert into test (name) values ('Littlefoot');
1 row created.
SQL> select * from test;
ID NAME
---------- --------------------
21 Littlefoot
SQL>
Добавить новый столбец легко:
SQL> alter table test add (address varchar2(20));
Table altered.
Уменьшить имя столбца 1010 * хитрый *.Этот работает;триггер все еще в порядке:
SQL> alter table test modify name varchar2(15);
Table altered.
SQL> select status from user_triggers where trigger_name = 'TRG_BI_TEST';
STATUS
--------
ENABLED
Это не так просто, но - существует обходной путь:
SQL> alter table test modify id number(4);
alter table test modify id number(4)
*
ERROR at line 1:
ORA-01440: column to be modified must be empty to decrease precision or scale
SQL> -- OK; it failed, so - let's add a new column, put old values in there,
SQL> -- drop the old column, rename the new column:
SQL> alter table test add id_new number(4);
Table altered.
SQL> update test set id_new = id;
1 row updated.
SQL> alter table test drop column id;
Table altered.
SQL> alter table test rename column id_new to id;
Table altered.
SQL> select status from user_triggers where trigger_name = 'TRG_BI_TEST';
STATUS
--------
ENABLED
SQL> insert into test (name) values ('Bigfoot');
1 row created.
SQL> select * from test;
NAME ADDRESS ID
--------------- -------------------- ----------
Littlefoot 21
Bigfoot 22
SQL>
ОК, давайте переименуем таблицу:
SQL> rename test to test_new;
Table renamed.
SQL> insert into test_new (name) values ('Testing');
1 row created.
SQL> select * from test_new;
NAME ADDRESS ID
--------------- -------------------- ----------
Littlefoot 21
Testing 23
Bigfoot 22
SQL>
Как видите, мне вообще не нужно было нажимать на курок, что бы я ни делал.
Если у вас все еще есть проблемы, не могли бы вы отредактировать ваше сообщение и продемонстрировать, что вы сделали и как отреагировал Oracle?