2010-10-23 2 views
3

J'écris une fonction pl/pgsql qui effectue un traitement de statistiques. en utilisant 8.2 de postgres. Je veux utiliser cette fonction globale très pratique:Tableau pl/pgsql en entrée d'une fonction d'agrégat

REGR_SLOPE (Y, X)

mais j'ai mon X et Y données stockées sous forme de tableaux locaux dans la fonction pl/pgsql: y double précision []; x double précision [];

problème est quand j'utiliser cela comme une ligne dans la fonction pl/pgsql:

pente: = REGR_SLOPE (y, x);

Je reçois une erreur me disant que cette fonction n'est pas disponible ou a les mauvais arguments. Je suppose que c'est parce que les entrées sont censées être sélectionnées comme des colonnes d'une table au lieu d'être passées en tant que tableaux de double précision.

Y at-il un moyen de faire la fonction regr_slope avec des tableaux locaux? (c'est-à-dire, un moyen de transformer le tableau en une entrée valide pour une fonction d'agrégat?)

merci.

Répondre

1
SELECT regr_slope(x,y) INTO slope FROM (SELECT unnest(ARRAY[1,2,3,4]) as x, unnest(ARRAY[5,6,7,8]) AS y) AS z; 
+1

merci. Cela a fonctionné pour moi avec un ajout. J'avais besoin d'ajouter dans la fonction unnest: – jeff

+0

DROP FUNCTION unnest (anyarray); CREATE OR REPLACE FUNCTION unnest (anyarray) RETOURS SETOF anyelement AS $ BODY $ 1 $ SELECT [i] à partir de generate_series (array_lower (1,1 $), array_upper (1,1 $)) i; $ CORPS $ LANGUE 'sql' VOLATILE COST 100 ROWS 1000; ALTER FONCTION unnest (anyarray) PROPRIÉTAIRE À postgres; – jeff

Questions connexes