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 :
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;
END
Problème, il me dit
"SQL error code = -104. Token unknown - line 14, column 27. ;."
Et 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).


Merci ^^