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 26/04/2011 12:59:44

gharras
Membre

passage d'un tableau a deux dimension en parametre

bonjour,

je suis entrain de travailler sur un projet ou j'utilise les tableau a deux dimension

mais le probleme c'est que je ne peut pas le passer en paramétre

si quelqu'un a une idée la dessus je serai bien ravi qu'il me donne sont aide

et merci d'avance

Hors ligne

#2 26/04/2011 13:15:54

Marc Cousin
Membre

Re : passage d'un tableau a deux dimension en parametre

On pourrait avoir un exemple de ce qui ne marche pas ?

Le passer en paramètre de quoi ? D'une fonction PLPgSQL ?


Marc.

Hors ligne

#3 26/04/2011 13:22:29

gharras
Membre

Re : passage d'un tableau a deux dimension en parametre

avec plaisir

dans le passage de mon parametre je veux passer une matrice et avoir comme resultat de sorti le minumim de la matrice et les coordonnees de se min dans la matrice

alors j'ai fais l declaration suivante

CREATE OR REPLACE FUNCTION get_min_matrice (IN matrice double precision[][], OUT min double precision, OUT i_min INTEGER,OUT j_min INTEGER) AS $$

apres de realise mon traitement

mais quand j'applle la fonction par

select get_min_matrice(matrice, min, i_min, j_min);

il me dit

HINT:  Aucune fonction ne correspond au nom donné et aux types d'arguments.

et aussi quand je voie ma fonction dans l'outils d'administration je voie que le double precision [][] devient double precision []

Dernière modification par gharras (26/04/2011 13:35:09)

Hors ligne

#4 26/04/2011 13:37:00

Marc Cousin
Membre

Re : passage d'un tableau a deux dimension en parametre

Je n'arrive pas à reproduire le problème:

CREATE OR REPLACE FUNCTION get_min_matrice (IN matrice double precision[][], OUT min INTEGER) language plpgsql AS $$
begin
raise notice '%', matrice;
min:= 1;
end;
$$
;
CREATE FUNCTION
marc=# SELECT get_min_matrice(ARRAY[[1,2],[2,3]]);NOTICE:  {{1,2},{2,3}}
 get_min_matrice 
-----------------
               1
(1 ligne)

Évidemment, mon double precision [][] devient double precision [] aussi. Mais il a l'air de s'en débrouiller. On récupère bien la matrice à l'intérieur.

Il faudrait un cas de test un peu plus évolué (le code réel par exemple).


Marc.

Hors ligne

#5 26/04/2011 13:44:12

gharras
Membre

Re : passage d'un tableau a deux dimension en parametre

alors voila la fonction que j'ai creer

CREATE OR REPLACE FUNCTION get_min_matrice (IN matrice double precision[], OUT min double precision, OUT i_min INTEGER,OUT j_min INTEGER) AS $$

DECLARE
BEGIN

	min := 100000;
	i_min := 0;
	j_min := 0;

	for i IN 1..array_length(matrice, 1) LOOP
		for j IN 1..array_length(matrice, 2) LOOP
			if min > matrice[i][j] then
				min = matrice[i][j];
				i_min := i;
				j_min := j;
			end if;
		end loop;
	end loop;

END;
$$ LANGUAGE plpgsql;

et apres dans ma fonction principale je fais appelle a cette fonction pour avoir les valeur du minimum et ses coordonne dans la matrice apres l'avoir initialiser

select get_min_matrice(matrice, min, i_min, j_min);

et je veux que mes parametre min, i_min et j_min soit affecter par les valeurs qui seront les resultat de ma fonction

mais il me donne cette erreur

ERREUR: la fonction get_min_matrice(double precision[], double precision, integer, integer) n'existe pas
État SQL :42883

Hors ligne

#6 26/04/2011 13:50:01

Marc Cousin
Membre

Re : passage d'un tableau a deux dimension en parametre

Ok. Alors c'est normal, les paramètres OUT de votre fonction ne sont pas substitués dans votre SELECT. Ils sont retournés par le select.

Il faut appeler get_min_matrice(matrice). Vous récupérerez un record, avec les champs min, i_min, j_min.


Marc.

Hors ligne

#7 26/04/2011 13:51:16

gharras
Membre

Re : passage d'un tableau a deux dimension en parametre

et c'est avec se record que je peut les avoir c'est ca

merci beaucoup pour ton aide

Hors ligne

#8 26/04/2011 13:52:21

Marc Cousin
Membre

Re : passage d'un tableau a deux dimension en parametre

Oui, les paramètres sont retournés dans le record.

Les IN et OUT, c'est simplement pour simplifier l'écriture de la fonction elle même. L'appelant ne le voit pas, les paramètres OUT sont retournés dans le record.


Marc.

Hors ligne

#9 26/04/2011 13:54:20

gharras
Membre

Re : passage d'un tableau a deux dimension en parametre

désole pour te deranger mais c'est juste que je suis nouveau dans postgres c'est pour ca que j'ai pas beaucoup de connaissance sur lui

donc est ce que vous pouvez m'expliquer comment affecter les resultats de ma fonction dans mes variable apres ca

Hors ligne

#10 26/04/2011 14:19:03

Marc Cousin
Membre

Re : passage d'un tableau a deux dimension en parametre

Voici un exemple de code qui le fait:

CREATE OR REPLACE FUNCTION appelle_get_min_matrice() returns void language plpgsql as $$
declare 
array_min double precision;
array_i_min integer;
array_j_min integer;
begin
SELECT INTO array_min,array_i_min,array_j_min min,i_min,j_min FROM get_min_matrice(ARRAY[[1,2],[2,3]]);
RAISE NOTICE '% % %', array_min,array_i_min,array_j_min;
end;
$$
;

Le truc à noter, c'est de bien choisir des noms de variables qui ne rentrent pas en conflit avec des noms de colonnes ou de tables (ou ici, d'attributs de l'enregistrement retourné par get_min_matrice)…


Marc.

Hors ligne

#11 26/04/2011 15:34:06

gharras
Membre

Re : passage d'un tableau a deux dimension en parametre

merci beaucoup pour ton aide

ca va beaucoup m'aider pour mon avancement dans mon projet

Hors ligne

Pied de page des forums