Vous n'êtes pas identifié(e).
- Contributions : Récentes | Sans réponse
Pages : 1
#1 25/05/2011 15:10:13
- bebert73
- Membre
fonction avec le nom d'une colonne en paramètre
Bonjour,
une fonction peut-elle retourner une valeur dont le type dépend de la valeur du paramètre passé en entrée ?
je m'explique :
soit une table "parametres" qui contient divers parametres d'une application web (version, date de sortie, etc...)
CREATE table parametres (
version_applicatif VARCHAR(8) PRIMARY KEY,
date_sortie DATE,
version_firefox VARCHAR(8),
langue_defaut CHAR(3)
);
Avec les valeurs
version_applicatif date_sortie version_firefox langue_defaut
1.0 12/03/2011 3.6 ENG
1.1 03/04/2011 4.0 FRA
j'aimerais écrire une fonction "recup_param" qui fonctionnerait de la façon suivante :
SELECT recup_param("1.0", "date_sortie"); ==> devrait renvoyer "12/03/2011"
SELECT recup_param("1.1", "langue_defaut") ==> devrait renvoyer "FRA"
SELECT recup_param("1.1", version_firefox") ==> devrait renvoyer "4.0"
etc.
Donc une fonction qui aurait en IN deux paramètres VARCHAR (la version et le nom du paramètre souhaité), et une sortie dont le type dépend de la valeur du paramètre passé en entrée
c'est faisable ? si oui quel devrait être le corps d'une telle fonction ?
Hors ligne
#2 25/05/2011 15:22:11
- Marc Cousin
- Membre
Re : fonction avec le nom d'une colonne en paramètre
C'est impossible de faire varier le type de sortie d'une fonction indépendamment de son type d'entrée. Une fonction polymorphique, sous PG, a le même type polymorphique en entrée et en sortie: vous lui passez un int, elle vous retourne un int.
C'est expliqué ici: http://docs.postgresqlfr.org/9.0/extend … olymorphic
La réponse est donc:
une fonction peut-elle retourner une valeur dont le type dépend de la valeur du paramètre passé en entrée ?
Non
une fonction peut retourner une valeur dont le type dépend du type du paramètre passé en entrée ?
Marc.
Hors ligne
#3 25/05/2011 15:26:52
- bebert73
- Membre
Re : fonction avec le nom d'une colonne en paramètre
ok merci
Hors ligne
Pages : 1