Cela ne fonctionnera pas. Pense juste à ce que tu demandes. Vous voulez qu'un déclencheur se déclenche lorsqu'une ligne est insérée dans tableA à insérez une ligne dans la table A. Quand la détente cesserait-elle de tirer?
Oracle est assez intelligent pour intervenir et empêcher le déclenchement en spirale dans l'infini:
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>
Voici ce qui se passe:
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>
« Est-il possible que je peux mise à jour TableA basé sur l'information de TableB donné un identifiant qui figure dans les deux tables? "
Si par « mise à jour » vous réellement dire UPDATE et - crucialement - en fonction de la logique précise que vous souhaitez mettre en œuvre alors peut-être oui:
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>
Cependant, cela reste une mauvaise idée. Les déclencheurs sont difficiles à comprendre et peuvent avoir un effet délétère sur la performance de notre SQL. Donc, je vous suggère de trouver un moyen de construire votre logique dans le corps principal de votre application, plutôt que d'essayer d'utiliser un déclencheur.
OK, c'est logique. Est-il possible que je puisse mettre à jour TableA basé sur info de TableB donné un id qui est dans les deux tables? – relyt