Vous n'êtes pas identifié(e).
- Contributions : Récentes | Sans réponse
#1 16/06/2011 19:45:02
- SQLpro
- Membre
Trou de mémoire: de quand date cette syntaxe, paramètres de fonction
Bonjour,
Savez vous de quand date (quelle version de PG) la syntaxe permettant d'utiliser directement le nom des paramètres dans le corps des functions à la place de leur position ordinale avec les $1, $2, $3... ?
A +
Frédéric Brouard, alias SQLpro, ARCHITECTE DE DONNÉES, Expert langage SQL
Le site sur les SGBD relationnel et langage SQL : http://sqlpro.developpez.com/
Modélisation de données, conseil, expertise, audit, optimisation, tuning, formation
* * * * * Enseignant CNAM PACA, ISEN Toulon, CESI Aix en Provence * * * * *
Hors ligne
#2 16/06/2011 21:00:26
- gleu
- Administrateur
Re : Trou de mémoire: de quand date cette syntaxe, paramètres de fonction
8.1. Auparavant, il était possible d'utiliser la clause ALIAS FOR (http://docs.postgresql.fr/8.0/plpgsql-d … ON-ALIASES), qui donnait le même résultat.
Guillaume.
Hors ligne
#3 16/06/2011 23:55:20
- SQLpro
- Membre
Re : Trou de mémoire: de quand date cette syntaxe, paramètres de fonction
8.1. Auparavant, il était possible d'utiliser la clause ALIAS FOR (http://docs.postgresql.fr/8.0/plpgsql-d … ON-ALIASES), qui donnait le même résultat.
Oui, ça j’avais vu, mais le problème est que même en ALIAS c'est de la constante !!!!
A +
Frédéric Brouard, alias SQLpro, ARCHITECTE DE DONNÉES, Expert langage SQL
Le site sur les SGBD relationnel et langage SQL : http://sqlpro.developpez.com/
Modélisation de données, conseil, expertise, audit, optimisation, tuning, formation
* * * * * Enseignant CNAM PACA, ISEN Toulon, CESI Aix en Provence * * * * *
Hors ligne
#4 17/06/2011 08:29:57
- gleu
- Administrateur
Re : Trou de mémoire: de quand date cette syntaxe, paramètres de fonction
Qu'est-ce que vous entendez par « c'est de la constante » ?
Guillaume.
Hors ligne
#5 17/06/2011 09:18:12
- SQLpro
- Membre
Re : Trou de mémoire: de quand date cette syntaxe, paramètres de fonction
Exemple :
CREATE FUNCTION F_JOUR_EN_8(d DATE)
RETURNS DATE
AS
$corps$
DECLARE semaine CONSTANT INTEGER := 7;
date_retour DATE;
BEGIN
d := d + semaine * INTERVAL '1 DAY';
RETURN d;
END;
$corps$
LANGUAGE PLPGSQL
Message d'erreur précis :
ERREUR: « $1 » est déclaré CONSTANT
CONTEXT: compilation de la fonction PL/pgsql « f_jour_en_8 » près de la ligne 4
Avec ou sans alias l'utilisation des arguments est passé en valeur !
A +
Dernière modification par SQLpro (17/06/2011 09:19:08)
Frédéric Brouard, alias SQLpro, ARCHITECTE DE DONNÉES, Expert langage SQL
Le site sur les SGBD relationnel et langage SQL : http://sqlpro.developpez.com/
Modélisation de données, conseil, expertise, audit, optimisation, tuning, formation
* * * * * Enseignant CNAM PACA, ISEN Toulon, CESI Aix en Provence * * * * *
Hors ligne
#6 17/06/2011 09:33:25
- Marc Cousin
- Membre
Re : Trou de mémoire: de quand date cette syntaxe, paramètres de fonction
Je laisse répondre gleu pour le reste, mais c'est le genre de fonctions qu'il vaut mieux écrire en SQL.
CREATE FUNCTION f_jour_en_8(d date) returns date language sql as $$
select ($1+interval '7 days')::date;
$$ IMMUTABLE
;
L'avantage des fonctions SQL, c'est qu'elles peuvent être «inlinées» dans le corps de la requête appelante.
Par ailleurs, si tu persistes à vouloir la faire en plpgsql, il faudrait la déclarer comme immutable (comme je l'ai fait aussi pour ma fonction SQL).
Marc.
Hors ligne
#7 17/06/2011 09:34:36
- gleu
- Administrateur
Re : Trou de mémoire: de quand date cette syntaxe, paramètres de fonction
C'est vrai jusqu'à la 9.0. Avec la 9.0, il est possible d'affecter des valeurs à des paramètres en entrée.
Guillaume.
Hors ligne