Bonjour,
Je vais essayer de vous énoncer mon problème le plus explicitement possible.
J'ai des requêtes de suppression écrites dynamiquement en java.
J'ai une table temporaire qui stocke les ID et les tables impactées.
J'effectue une suppression via une requête imbriquée pour faire la relation de la table impactée avec la table temporaire contenant les ID à supprimer.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 CREATE GLOBAL TEMPORARY TABLE TMP_BATCH_EXTRACTION ( ID VARCHAR2(25 BYTE), TABLES VARCHAR2(80 BYTE) ) ON COMMIT PRESERVE ROWS NOCACHE;
Fonctionne car TSERVICE ne contient qu'une clé primaire
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 delete from (select A.* from TSERVICE A, TMP_BATCH_EXTRACTION B where A.ID=B.ID and B.TABLES like '%@TSERVICE@%'
Ne fonctionne pas car SERVICE_CONFIGMATERIELLES contient une clé primaire définie sur 2 colonnes
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 delete from (select A.* FROM SERVICE_CONFIGMATERIELLES A, TMP_BATCH_EXTRACTION B WHERE A.SOURCE=B.ID AND TABLES LIKE '%@TSERVICE@%')
Le problème survient quand la table impactée n'a pas de clé primaire ou sur plusieurs colonnes.
Il faut savoir que la vue est le résultat de la requête imbriquée.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2java.sql.SQLException: ORA-01752: Impossible de supprimer de la vue sans exactement une table protégée par clé
Si j'ajoute une clé primaire [ID] sur ma table temporaire, qui sert de liaison, tout fonctionne que la table impactée aie ou non des clés primaires, mais le problème c'est qu'un ID peut être indentique sur plusieurs tables, donc j'ai besoin de faire une clé primaire sur les 2 colonnes [ID, TABLES] et quand je suis sur 2 clés primaires, il me retourne la même erreur.
Comment résoudre mon problème épineux ?
En vous remerciant d'avance.
Boutss
Partager