Bonjour,

Je suis actuellement bloquée sur un ordre SQL simple ayant une réaction assez imprévue.

Je récupère des données à intégrer dans ma base Oracle depuis un fichier XML. Dans ce fichier j'ai des informations concernant des dossiers qui peuvent déjà exister dans ma base et auquel cas je dois faire des mises à jour, ou alors des dossiers qui n'existent pas encore et que je dois créer.

Je fais donc un select pour récupérer l'ID de dossier dans ma base, si il existe, correspondant aux données que je récupère:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
SELECT DISTINCT
CASE WHEN EXISTS(SELECT ID_DOSSIER FROM TableDossier
                           WHERE TableDossier.DOSSIERNOM = 'toto') -- toto est une valeur unique, il ne peut y avoir de doublon
    THEN 1
    ELSE 0
END 
INTO v_exist
FROM DUAL;
 
IF v_exist=0 THEN
--Le dossier n'existe pas, je dois le créer
ELSE
--Le dossier existe, je dois le mettre à jour
END IF;
Lorsque le dossier n'existe pas, tout fonctionne parfaitement : création du dossier, remplissage des tables liées, etc.

Mais lorsque le dossier existe déjà, je me retrouve avec une erreur de type TOO_MANY_ROWS.
Alors bon, j'ai bien pensé à faire un catch sur l'erreur et effectuer le traitement de mise à jour quand je la récupère mais, c'est môôôôôôche!!

Bref, je me retrouve un peu perdue face à ce comportement.