Это не будет работать.Просто подумай о том, что ты спрашиваешь.Требуется триггер, который срабатывает при вставке строки в таблицу A, чтобы вставить строку в таблицу A .Когда триггер прекратит срабатывать?
Oracle достаточно умен, чтобы вмешаться и предотвратить спуск курка в бесконечность:
SQL> create or replace trigger t69_after_ins
2 after insert on t69
3 begin
4 insert into t69 values ('blah', 'blah', 99);
5 end;
6 /
Trigger created.
SQL>
Вот что происходит:
SQL> insert into t69 values ('this', 'that', 1)
2 /
insert into t69 values ('this', 'that', 1)
*
ERROR at line 1:
ORA-00036: maximum number of recursive SQL levels (50) exceeded
ORA-06512: at "APC.T69_AFTER_INS", line 2
ORA-04088: error during execution of trigger 'APC.T69_AFTER_INS'
ORA-06512: at "APC.T69_AFTER_INS", line 2
ORA-04088: error during execution of trigger 'APC.T69_AFTER_INS'
ORA-06512: at "APC.T69_AFTER_INS", line 2
ORA-04088: error during execution of trigger 'APC.T69_AFTER_INS'
ORA-06512: at "APC.T69_AFTER_INS", line 2
ORA-04088: error during execution of trigger 'APC.T69_AFTER_INS'
ORA-06512: at "APC.T69_AFTER_INS", line 2
ORA-04088: error during execution of trigger 'APC.T69_AFTER_INS'
ORA-06512: at "APC.T69_AFTER_INS", line 2
ORA-04088: error during execution of trigger 'APC.T69_AFTER_INS'
ORA-06512: at "APC.T69_AFTER_INS", line 2
ORA-04088: error during execution of trigger 'APC.T69_AFTER_INS'
ORA-06512: at "APC.T69_AFTER_INS", line 2
ORA-04088: error during execution of trigger 'APC.T69_AFTER_INS'
ORA-06512: at "APC.T69_AFTER_INS", line 2
ORA-04088: error during execution of trigger 'APC.T69_AFTER_I
SQL>
"Есть ли способ, которым я могу обновить TableA на основе информации из TableB, учитывая идентификатор, который находится в обеих таблицах?"
Если под словом "update" вы действительно имеете в виду UPDATEи, что очень важно, в зависимости от конкретной логики, которую вы хотите реализовать, тогда, возможно, да:
SQL> create or replace trigger t69_after_ins
2 after insert on t69
3 begin
4 update t69
5 set name = ( select name from t23
6 where t23.id = t69.id )
7 where name is null;
8 end;
9 /
Trigger created.
SQL> insert into t69 (id, name) values (122, null)
2 /
1 row created.
SQL> select name from t69
2 where id = 122
3 /
NAME
----------
MAISIE
SQL>
Однако это остается плохой идеей.Триггеры сложны для понимания и могут оказать негативное влияние на производительность нашего SQL.Поэтому я предлагаю вам попытаться найти способ встроить свою логику в основную часть вашего приложения, а не пытаться использовать триггер.