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:
Lorsque le dossier n'existe pas, tout fonctionne parfaitement : création du dossier, remplissage des tables liées, etc.
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;
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.
Partager