Vous n'êtes pas identifié(e).
Pages : 1
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
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
Bonjour Marc,
La réponse est claire.
Merci.
Hors ligne
Désolé de ne pas avoir mieux à proposer
Marc.
Hors ligne
Rebonjour,
Dans le cas du RECORD, comment exploiter les valeurs en retour de Fonction ?
Merci.
Hors ligne
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
Super réactivité
Merci Marc et bon week-end.
Hors ligne
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
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
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
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
Ah oui, pas bête.
Guillaume.
Hors ligne
Pages : 1