Vous n'êtes pas identifié(e).
Bonjour,
Nous souhaitons migrer une application d'un SGBD IngresSQL vers PostgreSQL.
Sous Ingres, nous utilisons du code du style :
EXEC SQL SELECT clicode, clinom
INTO :cli.clicode, :cli.clinom
FROM CLIENT ORDER BY CLICODE;
printf("SELECT - sqlcode = %d sqlstate = %s\n", sqlca.sqlcode, sqlca.sqlstate);
EXEC SQL BEGIN;
printf("LOOP Client %d %s\n", cli.clicode, cli.clinom);
EXEC SQL END;
Ce qui permet sans passer par un curseur d'effectuer du code après chaque enregistrement trouvé dans la requête.
Sous Postgre, la précompilation se passe bien, mais en exécution, après le select, on à l'erreur sqlcode -203 (ECPG_TOO_MANY_MATCHES) sqlstate 21000 (cardinality_violation).
Ce qui sous-entend visiblement que le select donne plusieurs enregistrements, ce qui ne serait pas permis.
Nous avons utilisé cette méthode dans de nombreux programmes et nous cherchons à effectuer un minimum de modifications si c'est possible
Est-ce que quelqu'un saurait comment palier à ce problème (sans passer par un curseur évidemment)
Merci à tous
Hors ligne