J'ai un gestionnaire de tâches qui tombe quelques informations dans une table de journal simmilar à ceci:Mise à jour de la table Oracle référençant la table/le champ mis à jour? (? Mise à jour Corrélée)
processId owner state state_date
------------------------------------------------------------
1-88D6PJ group1 OPENED 14/08/2013 14:57:44
1-88D6PJ group2 ASSIGNED 14/08/2013 14:58:36
1-88D6PJ group3 ASSIGNED 15/08/2013 11:26:45
1-88D6PJ group2 ASSIGNED 17/08/2013 17:20:13
1-88D6PJ group3 ASSIGNED 19/08/2013 09:05:12
1-88D6PJ null FINISHED 22/08/2013 12:13:59
Lorsqu'une tâche est terminée, le propriétaire ne sont pas stockées. Je l'ai corrigé dans le code, mais maintenant je voudrais corriger les anciennes entrées. Pour ce faire, pour chaque entrée avec le propriétaire null, j'ai besoin de rechercher l'entrée pénultième pour prendre le propriétaire, qui sera le même qui ferme la tâche.
Je tentais de faire une approche, et semble que quelque chose du même type que cela pourrait fonctionner:
UPDATE tasks.tasks_log t1
set (t1.owner) =
(SELECT owner
FROM (SELECT owner
FROM tasks.tasks_log t2
WHERE t1.processId = ep2.processId
and state not in ('FINISHED', 'CANCELLED')
and state_date is not null
ORDER BY state_date DESC)
WHERE rownum = 1)
Peut-être pas élégant ou efficcient, mais il semble qu'il pourrait fonctionner, mais quand je le lance, je reçois un ORA -00904: "t1". "ProcessId" identificateur invalide.
Je suppose qu'il n'est pas possible de faire référence à l'identificateur de table mis à jour, mais après avoir vérifié la documentation de l'oracle et certains messages, je vois similar mises à jour supposé fonctionner.
Est-il possible de faire cette référence? ou je dois totalement changer l'approche pour faire cette mise à jour?
Merci beaucoup. J'ai bien travaillé, et j'ai appris un peu plus car c'est la première fois que je vois ça. – Mortuk