Oracle
 sql >> Base de données >  >> RDS >> Oracle

Oracle après la mise à jour du déclencheur créant un lien de base de données publique

Créer un lien de base de données à la volée semble être une chose inhabituelle à faire; votre schéma doit généralement être statique et stable. Cependant, si vous le devez, il serait plus simple d'encapsuler la mise à jour et le lien dans une procédure, ou simplement d'émettre deux instructions - probablement, tout ce qui effectue la mise à jour est de toute façon assez contrôlé, sinon vous devrez traiter avec plusieurs personnes déclenchant ce multiple fois, ce qui serait encore plus gênant.

Vous pouvez probablement faire en sorte que cela fonctionne en ajoutant PRAGMA autonomous_transaction; à votre déclencheur, comme démontré pour un problème similaire (créer une vue plutôt qu'un lien) dans cette réponse , mais je ne suis pas en mesure de tester cela pour le moment.

create or replace
TRIGGER CreateLinkTrigger
after UPDATE of Year ON tableInit 
for each row
DECLARE
    add_link VARCHAR2(200);
    PRAGMA autonomous_transaction;
BEGIN
    ...

Vous pouvez également faire en sorte que le déclencheur soumette une tâche asynchrone pour effectuer le DDL, comme décrit dans cette réponse , et il y a plus d'un exemple dans cette réponse , où vous modifieriez le bloc anonyme du travail pour effectuer votre execute immediate .

Il serait probablement préférable de créer les liens pour les prochaines années à l'avance lors d'une fenêtre de maintenance, ou selon un calendrier, ou à partir d'une procédure ; plutôt que d'essayer d'associer un changement de schéma à un changement de données.