Vous n'êtes pas identifié(e).
Pages : 1
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
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
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
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
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
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
et c'est avec se record que je peut les avoir c'est ca
merci beaucoup pour ton aide
Hors ligne
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
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
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
merci beaucoup pour ton aide
ca va beaucoup m'aider pour mon avancement dans mon projet
Hors ligne
Pages : 1