Bonjour,
Je voudrais simuler le comportement de l'instruction INSERT IGNORE de MySQL dans Firebird.
J'ai une table qui contient un id auto incrémenté et 2 champs entier, value_A et value_B. J'ai définie une contrainte d'unicité sur {valeur_A , valeur_B}.
Le comportement souhaité est le suivant :
J’insère respectivement les valeurs 2 et 5 dans les champs valeur_A et valeur_B et je retourne l'id créé. Si la requête provoque une violation de la contrainte d'unicité (erreur 803), alors je sélectionne l'id dont les champs valeur_A et valeur_B valent respectivement 2 et 5.
Concrètement, j'en arrives à la requête suivante :
Problème, il me dit
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15 EXECUTE block AS BEGIN INSERT INTO "table"( "valeur_A", "valeur_B" )VALUES( 2, 5 )RETURNING "id"; WHEN SQLCODE -803 DO SELECT "id" FROM "table" WHERE "valeur_A"=2 AND "valeur_B"=5; ENDEt je ne comprends pas pourquoi il me dit que le dernier ; est invalide (et si je l'enlève, il me dit que c'est END qui est invalide, ce qui me parait logique)."SQL error code = -104. Token unknown - line 14, column 27. ;."
Merci ^^
Partager