Bonjour,

J'ai ce schema :
- Table 'Entity' (entity_id, completed, reference_year)
- Table 'Transaction' (transaction_id, statut, entity_id)
- Table 'Document'(document_id, transaction_id, fichier)

Les relations entre elles sont les suivantes :
- 1 Entity peut avoir plusieurs transactions (1-n)
- 1 Transaction peut avoir plusieurs documents (1-m)

Je souhaite cloner les transactions d'une entité (sous conditions) ainsi que leurs documents en utilisant un trigger.

Pour cela, j'ai fait ces deux triggers, le premier permet de cloner les transactions et le second permet de cloner les document ou fur et a mesure qu'une transaction est cloner.

Voici le code sql utilisée :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
 
 
-- Trigger clone Transaction
CREATE TRIGGER `test_transaction` AFTER
INSERT ON `entity`
FOR EACH
        ROW BEGIN                 
 
        set @newValue = new.ENTITY_ID;
 
           INSERT INTO transaction(STATUS, ENTITY_ID)
 
           SELECT 'DRAFT', @newValue
 
           FROM entity a, transaction c
 
           WHERE a.entity_id = c.entity_id AND
                     c.status IN ('VALIDATED', 'IN_PROGRESS') AND a.completed =      
                     1 AND year(a.reference_year) = year(new.reference_year)-1 
                     group by c.transaction_id;                                                                                  
 
END;
 
commit;
 
-- Trigger clone documents
 
CREATE TRIGGER `clone_document` AFTER
INSERT ON `transaction`
FOR EACH
        ROW BEGIN     
 
        if new.parent_id is not null then  -- parent_id est dans la table transaction   
 
            set @newValue = new.transaction_id;       
 
              INSERT INTO document(TRANSACTION_ID, FICHIER)
              SELECT @newValue, c.FICHIER
              FROM transaction a, document c
              WHERE a.transaction_id = c.transaction_id                        
              group by c.document_id;   
 
        end if;                
 
END;
 
commit;
Quand je fait un insert dans entity , j'ai cette erreur :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
 
Cannot add or update a child row: a foreign key constraint fails (`optidoc`.`transaction`, CONSTRAINT `FK_TRANSACTION_ENTITY` FOREIGN KEY (`ENTITY_ID`) REFERENCES `entity` (`ENTITY_ID`))
Par contre si je supprime le second trigger et je clone uniquement les transactions, le clonage fonctionne bien.

Si vous pouvez m'aider a resoudre ce probleme de clonage de deux niveaux.

Merci