Voila je suis actuellement stagiaire dans une entreprise et étant donner le fait que PostGre ne contient pas la clause GOTO je cherche à esquiver ce problème en me servant du langage C qui lui possède cette instruction. Pour cela, j'ai créer une fonction externe :

PG_FUNCTION_INFO_V1(Test);

PGMODULEEXPORT Datum Test(PG_FUNCTION_ARGS)
{
EXEC SQL BEGIN DECLARE SECTION;
EXEC SQL END DECLARE SECTION;
EXEC SQL CONNECT TO tcp:postgresql://localhost/Test USER admini USING admini;
EXEC SQL WHENEVER SQLERROR SQLPRINT;
EXEC SQL INSERT INTO animal(nom) VALUES ('loup');
EXEC SQL COMMIT;
PG_RETURN_INT32(1);
}

Cette fonction externe mélange du Embedded/SQL avec du C, une fois passé par le préprocesseur ECPG pour traduire les instructions E/SQL,je la convertis sous la forme d'une dll que je déclare grâce à cette instruction à Postgre :

CREATE OR REPLACE FUNCTION fn_externe()
RETURNS integer AS
'C:/Program Files/PostgreSQL/8.3/Mesfonctions/madll', 'Test'
LANGUAGE 'c' VOLATILE STRICT

Ma procédure externe fonctionne à merveille et insère bien ma ligne cependant, j'ai un soucis au niveau de la connexion. En effet, j'utilise la commande E/SQL CONNECT or une connexion est très couteux au niveau du temps d'exécution de ma procédure. Etant donner qu'elle se situe avec mes autres procédures en PL/pgSQL, je devrais pouvoir me passer d'une connexion et utiliser la connexion courante lors de l'appel de ma procédure externe. Malheureusement, je ne sais pas comment faire. Si quelqu'un le sait je lui serais très reconnaissant de bien vouloir me transmettre la solution. Merci d'avance