Clonage Table Mere et ses Fils ainsi que les petits fils (1-n, 1-m)
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:
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:
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