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 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

gleu a écrit :

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

Pied de page des forums