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.

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;
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
delete from (select A.* from TSERVICE A, TMP_BATCH_EXTRACTION B 
where A.ID=B.ID and B.TABLES like '%@TSERVICE@%'
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 SERVICE_CONFIGMATERIELLES A, TMP_BATCH_EXTRACTION B 
WHERE A.SOURCE=B.ID AND TABLES LIKE '%@TSERVICE@%')
Ne fonctionne pas car SERVICE_CONFIGMATERIELLES contient une clé primaire définie sur 2 colonnes

Le problème survient quand la table impactée n'a pas de clé primaire ou sur plusieurs colonnes.

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
java.sql.SQLException: ORA-01752: Impossible de supprimer de la vue
 sans exactement une table protégée par clé
Il faut savoir que la vue est le résultat de la requête imbriquée.

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