Lists: | Postg스포츠 토토SQL : Postg스포츠 |
---|
From: | "GIUSEFFI Marie" <marie(dot)giuseffi(at)cea(dot)fr> |
---|---|
To: | <pgsql-fr-generale(at)postgresql(dot)org> |
Subject: | Erreur sur une fonction avec un argument de type (integer, [numeric, numeric] |
Date: | 2010-08-25 12:33:46 |
Message-ID: | C8D3F57E07352C4B9C8E779E2B27B9EA017B49D1@LAXA.intra.cea.fr |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Lists: | pgsql-fr-generale |
Bonjour,
J'aimerais créer une fonction avec comme argument un index et un tableau contenant deux éléments x et y.
La fonction (voir ci-dessous) est bien acceptée par postgre (8.4.4 ss windowsXP) mais dès que j'essaye de l'appeler, un message d'erreur m'indique que la fonction ne correspond pas au nom donné et aux types d'arguments.
Si quelqu'un a une idée sur comment passer les arguments à la fonction ?
Cordialement
Marie
DROP TYPE IF EXISTS tab_abscisse CASCADE;
CREATE TYPE tab_abscisse AS (
x numeric,
y numeric
);
CREATE OR REPLACE FUNCTION fct_a(
id_tab integer,
tab_abs tab_abscisse [] )
RETURNS integer AS $$
BEGIN
RETURN 1;
END;
$$ LANGUAGE plpgsql;
SELECT fct_a(1, ARRAY[[1.0,2.0], [3.0,4.0]] ) AS answer;
Ou
SELECT fct_a(1, ARRAY[ARRAY[1,2], ARRAY[3,4]] ) AS answer;
ERREUR: la fonction fct_a(integer, numeric[]) n'existe pas
LINE 2: SELECT fct_a(1, ARRAY[[1.0,2.0], [3.0,4.0]] ) AS answer;
^
HINT: Aucune fonction ne correspond au nom donné et aux types d'arguments.
Vous devez ajouter des conversions explicites de type.
_______________________________________________
Marie Giuseffi
Ingénieur chercheur / Research engineer
DRT/LIST/DCSI/LMO - Bâtiment 528 P 138B
case courrier 94
CEA - Centre d'études de Saclay
F - 91191 GIF-SUR-YVETTE Cedex
E-mail : marie(dot)giuseffi(at)cea(dot)fr <mailto:marie(dot)giuseffi(at)cea(dot)fr>
Tél. : +33 1 69 08 29 22
Fax. : +33 1 69 08 83 95
http://www-list.cea.fr <http://www-list.cea.fr/>
_______________________________________________
From: | Marc Cousin <cousinmarc(at)gmail(dot)com> |
---|---|
To: | pgsql-fr-generale(at)postgresql(dot)org |
Cc: | "GIUSEFFI Marie" <marie(dot)giuseffi(at)cea(dot)fr> |
Subject: | Re: Erreur sur une fonction avec un argument de type (integer, [numeric, numeric] |
Date: | 2010-08-25 14:03:31 |
Message-ID: | 201008251603.32076.cousinmarc@gmail.com |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Lists: | Postg스포츠 토토SQL : Postg스포츠 |
The Wednesday 25 August 2010 14:33:46, GIUSEFFI Marie wrote :
> Bonjour,
>
> J'aimerais créer une fonction avec comme argument un index et un tableau contenant deux éléments x et y.
>
> La fonction (voir ci-dessous) est bien acceptée par postgre (8.4.4 ss windowsXP) mais dès que j'essaye de l'appeler, un message d'erreur m'indique que la fonction ne correspond pas au nom donné et aux types d'arguments.
>
> Si quelqu'un a une idée sur comment passer les arguments à la fonction ?
>
> Cordialement
>
> Marie
>
>
>
> DROP TYPE IF EXISTS tab_abscisse CASCADE;
>
> CREATE TYPE tab_abscisse AS (
>
> x numeric,
>
> y numeric
>
> );
>
> CREATE OR REPLACE FUNCTION fct_a(
>
> id_tab integer,
>
> tab_abs tab_abscisse [] )
>
> RETURNS integer AS $$
>
>
>
> BEGIN
>
> RETURN 1;
>
> END;
>
> $$ LANGUAGE plpgsql;
>
>
>
>
>
> SELECT fct_a(1, ARRAY[[1.0,2.0], [3.0,4.0]] ) AS answer;
>
> Ou
>
> SELECT fct_a(1, ARRAY[ARRAY[1,2], ARRAY[3,4]] ) AS answer;
>
>
>
> ERREUR: la fonction fct_a(integer, numeric[]) n'existe pas
>
> LINE 2: SELECT fct_a(1, ARRAY[[1.0,2.0], [3.0,4.0]] ) AS answer;
La bonne syntaxe :
SELECT fct_a(1, ARRAY[ (1.0,2.0)::tab_abscisse, (3.0,4.0)::tab_abscisse] ) AS answer;
Il attend un tableau de tab_abscisse. Ce qui n'est pas exactement la même chose qu'un tableau à deux dimensions de numériques.