PostgreSQL La base de donnees la plus sophistiquee au monde.

Forums PostgreSQL.fr

Le forum officiel de la communauté francophone de PostgreSQL

Vous n'êtes pas identifié(e).

#1 09/07/2010 09:36:26

mortimer.pw
Membre

Fonction avec paramètre OUT

Bonjour,


Je travaille sur une BD 8.4 sous Cent-OS.

Je dois réécrire des Fonctions Oracle en Pl/PgSQL.


Exemple :

FUNCTION Get_Doc(MODE IN VARCHAR2,ERREUR OUT VARCHAR2,DOC OUT VARCHAR2) RETURN NUMBER IS
     retour NUMBER:=-1;
BEGIN
     IF NOT(Ctrl(MODE,ERREUR,DOC)) THEN
          RAISE_APPLICATION_ERROR(-20001,ERREUR);
     ELSE
          retour:=1;
     END IF;
     RETURN(retour);
EXCEPTION
     WHEN OTHERS THEN
          ERREUR:=SQLERRM;
          RETURN(retour);
END Get_Doc;


En consultant la Doc, j'ai vu qu'il n'est pas possible d'écrire une Fonction avec des paramètres en OUT et de renvoyer une valeur.

Comment peut-on procéder ?

Merci pour les réponses.

Hors ligne

#2 09/07/2010 10:09:40

Marc Cousin
Membre

Re : Fonction avec paramètre OUT

Bonjour,

Effectivement, c'est soit des paramètres OUT, soit une valeur : les paramètres OUT déterminent le type de retour de la fonction, c'est à dire que si il y a plusieurs paramètres, la fonction retourne un record de ces paramètres.

On ne peut donc procéder que d'une de ces deux façons, ce qui veut malheureusement dire pour vous modifier le prototype de la fonction, donc ses appels.


Marc.

Hors ligne

#3 09/07/2010 10:35:08

mortimer.pw
Membre

Re : Fonction avec paramètre OUT

Bonjour Marc,

La réponse est claire.

Merci.

Hors ligne

#4 09/07/2010 10:48:59

Marc Cousin
Membre

Re : Fonction avec paramètre OUT

Désolé de ne pas avoir mieux à proposer smile


Marc.

Hors ligne

#5 09/07/2010 11:03:22

mortimer.pw
Membre

Re : Fonction avec paramètre OUT

Rebonjour,
Dans le cas du RECORD, comment exploiter les valeurs en retour de Fonction ?
Merci.

Hors ligne

#6 09/07/2010 11:11:12

Marc Cousin
Membre

Re : Fonction avec paramètre OUT

Comme un record sur select de table : vous récupérez un record, dont vous accédez aux champs. Par exemple, si les paramètres OUT sont sortie1 et sortie2, de la fonction fonction1, vous faites dans la fonction appelante :

monrecord:=fonction1();
les valeurs récupérées seront
monrecord.sortie1 et monrecord.sortie2


Marc.

Hors ligne

#7 09/07/2010 11:12:29

mortimer.pw
Membre

Re : Fonction avec paramètre OUT

Super réactivité
Merci Marc et bon week-end.

Hors ligne

#8 09/07/2010 13:22:54

gleu
Administrateur

Re : Fonction avec paramètre OUT

Il y avait un post sur le forum que je n'arrive plus à retrouver où on utilisait un paramètre personnalisé. Ça demande de pouvoir modifier une fois le fichier de configuration, mais après, on peut avoir à peu près la même chose que Oracle.


Guillaume.

Hors ligne

#9 09/07/2010 14:29:10

Marc Cousin
Membre

Re : Fonction avec paramètre OUT

gleu : je n'ai pas retrouvé le post non plus. Mais de mémoire, la nuance est que ce paramètre personnalisé est une variable de session (donc globale à la session). Ce qui rend sa manipulation un peu dangereuse tout de même.


Marc.

Hors ligne

#10 09/07/2010 15:13:40

gleu
Administrateur

Re : Fonction avec paramètre OUT

Je ne vois pas en quoi elle serait dangereuse. Mais bon, ce qui est plus embêtant, c'est que, dans tous les cas, il faut changer l'applicatif.


Guillaume.

Hors ligne

#11 09/07/2010 15:16:38

Marc Cousin
Membre

Re : Fonction avec paramètre OUT

Parce qu'une variable globale peut être modifée par un autre chemin dans le code que celui que tu as devant les yeux. Par exemple si une fonction appelle une sous fonction qui utilise la même variable globale. Voire même la même fonction, dans un cas de récursion par exemple.


Marc.

Hors ligne

#12 09/07/2010 15:36:23

gleu
Administrateur

Re : Fonction avec paramètre OUT

Ah oui, pas bête.


Guillaume.

Hors ligne

Pied de page des forums