pgplsql: Substitution de variables

Lists: Postg스포츠 토토 사이트SQL
From: Samuel ROZE <samuel(dot)roze(at)aliceadsl(dot)fr>
To: pgsql-fr-generale(at)postgresql(dot)org
Subject: pgplsql: Substitution de variables
Date: 2008-09-02 17:42:35
Message-ID: 1220377355.7881.13.camel@samuel-laptop
Views: Raw Message | Whole Thread | Download mbox | Resend email
Lists: Postg스포츠 토토 사이트SQL

Bonjour à tous (encore une fois :) ),

Je suis actuellement confronté à un problème que je trouve assez bizare,
lors de la substitution de variables dans une requête SELECT :

----------
[...]
SELECT (timestamp with time zone "v_new_time" - timestamp with time zone
"v_temps") INTO v_interval;
[...]
----------

Cette simple commande SELECT ... INTO donne cette erreur :

----------
7-statistiques-triggers.sql:116: ERREUR: erreur de syntaxe sur ou près
de « $1 » at character 37
QUERY: SELECT (timestamp with time zone $1 - timestamp with time zone
$2 )
CONTEXT: SQL statement in PL/PgSQL function "parse_donnees_brutes" near
line 66
----------

Je ne comprend pas... J'ai essayer avec des guillements simple, ça
marche mais après lors de l'exécution il y a un problème logique qui me
dit par exemple que "v_new_time n'est pas du type timestamptz"...

Pouvez-vous m'aider ou me donner des pistes ?

Merci à vous.
Cordialement, Samuel ROZE.


From: Guillaume Lelarge <guillaume(at)lelarge(dot)info>
To: Samuel ROZE <samuel(dot)roze(at)aliceadsl(dot)fr>
Cc: pgsql-fr-generale(at)postgresql(dot)org
Subject: Re: pgplsql: Substitution de variables
Date: 2008-09-02 19:19:49
Message-ID: 48BD91D5.9030707@lelarge.info
Views: Raw Message | Whole Thread | Download mbox | Resend email
Lists: pgsql-fr-generale

Samuel ROZE a écrit :
> Bonjour à tous (encore une fois :) ),
>
> Je suis actuellement confronté à un problème que je trouve assez bizare,
> lors de la substitution de variables dans une requête SELECT :
>
> ----------
> [...]
> SELECT (timestamp with time zone "v_new_time" - timestamp with time zone
> "v_temps") INTO v_interval;
> [...]
> ----------
>
> Cette simple commande SELECT ... INTO donne cette erreur :
>
> ----------
> 7-statistiques-triggers.sql:116: ERREUR: erreur de syntaxe sur ou près
> de « $1 » at character 37
> QUERY: SELECT (timestamp with time zone $1 - timestamp with time zone
> $2 )
> CONTEXT: SQL statement in PL/PgSQL function "parse_donnees_brutes" near
> line 66
> ----------
>
> Je ne comprend pas... J'ai essayer avec des guillements simple, ça
> marche mais après lors de l'exécution il y a un problème logique qui me
> dit par exemple que "v_new_time n'est pas du type timestamptz"...
>

Logique car un guillemet simple indique une chaîne de caractères, et la
chaîne de caractères 'v_new_time' ne ressemble en rien à une valeur de
type timestamp.

> Pouvez-vous m'aider ou me donner des pistes ?
>

Ton problème vient de la façon de faire ton cast. À mon avis, c'est pas
standard du tout. Bref, tu as deux possibilités :

* soit la syntaxe "::"

select d1::"timestamp with time zone" - d2::timestamp with time zone
into v;

* soit utiliser cast

Quelque soit ton choix, pense à placer le INTO après le SELECT,
autrement dit :

select into v d1::timestamp with time zone
- d2::timestamp with time zone ;

--
Guillaume.
http://www.postgresqlfr.org
http://dalibo.com


From: Samuel ROZE <samuel(dot)roze(at)aliceadsl(dot)fr>
To: Guillaume Lelarge <guillaume(at)lelarge(dot)info>
Cc: pgsql-fr-generale(at)postgresql(dot)org
Subject: Re: pgplsql: Substitution de variables
Date: 2008-09-03 13:48:01
Message-ID: 1220449681.20646.0.camel@samuel-laptop
Views: Raw Message | Whole Thread | Download mbox | Resend email
Lists: pgsql-fr-generale

Bonjour,

Merci beaucoup, ça marche sans problèmes avec la deuxième méthode qui
est :

SELECT variable::timestamptz

(et non "::timestamp with zone" :) )

Merci !

Le mardi 02 septembre 2008 à 21:19 +0200, Guillaume Lelarge a écrit :
> Samuel ROZE a écrit :
> > Bonjour à tous (encore une fois :) ),
> >
> > Je suis actuellement confronté à un problème que je trouve assez bizare,
> > lors de la substitution de variables dans une requête SELECT :
> >
> > ----------
> > [...]
> > SELECT (timestamp with time zone "v_new_time" - timestamp with time zone
> > "v_temps") INTO v_interval;
> > [...]
> > ----------
> >
> > Cette simple commande SELECT ... INTO donne cette erreur :
> >
> > ----------
> > 7-statistiques-triggers.sql:116: ERREUR: erreur de syntaxe sur ou près
> > de « $1 » at character 37
> > QUERY: SELECT (timestamp with time zone $1 - timestamp with time zone
> > $2 )
> > CONTEXT: SQL statement in PL/PgSQL function "parse_donnees_brutes" near
> > line 66
> > ----------
> >
> > Je ne comprend pas... J'ai essayer avec des guillements simple, ça
> > marche mais après lors de l'exécution il y a un problème logique qui me
> > dit par exemple que "v_new_time n'est pas du type timestamptz"...
> >
>
> Logique car un guillemet simple indique une chaîne de caractères, et la
> chaîne de caractères 'v_new_time' ne ressemble en rien à une valeur de
> type timestamp.
>
> > Pouvez-vous m'aider ou me donner des pistes ?
> >
>
> Ton problème vient de la façon de faire ton cast. À mon avis, c'est pas
> standard du tout. Bref, tu as deux possibilités :
>
> * soit la syntaxe "::"
>
> select d1::"timestamp with time zone" - d2::timestamp with time zone
> into v;
>
> * soit utiliser cast
>
> Quelque soit ton choix, pense à placer le INTO après le SELECT,
> autrement dit :
>
> select into v d1::timestamp with time zone
> - d2::timestamp with time zone ;
>
>
> --
> Guillaume.
> http://www.postgresqlfr.org
> http://dalibo.com
>