Re: Erreur sur une fonction avec un argument de type (integer, [numeric, numeric]

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.