Bonsoir à Tous,
Après avoir cherché dans les post sans résultat, j'aimerais avoir vos avis sur une difficulté de syntaxe. J'essaye de créer une fonction qui me retourne 2 champs l'un de type int et l'autre de type float ce qui correspond au select et je réalise en même temps un update.
J'ai déclaré le type suivant:
J'essaye la fonction suivante dont les requêtes INSERT et UPDATE sont fonctionnelles:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 CREATE TYPE soustraire_qtite AS (id_lot INTEGER, quantite FLOAT);
Lorsque j'exécute la requête, il m'affiche le message d'erreur suivant qui correspond à l'instruction $2 := 0;
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23 CREATE FUNCTION soustraire_qtite(INTEGER, FLOAT) RETURNS SETOF soustraire_qtite AS ' DECLARE enr soustraire_qtite; begin while $2 != 0 loop SELECT INTO enr id_lot, (quantite_restante - $2) AS quantite FROM lot WHERE id_mp = $1 AND date_peremption LIKE (SELECT min(date_peremption) FROM lot where id_mp = $1 AND quantite_restante != 0); UPDATE lot SET quantite_restante = (quantite_restante - $2) WHERE id_mp = $1 AND date_peremption LIKE (SELECT min(date_peremption) FROM lot where id_mp = $1 AND quantite_restante != 0); if enr.quantite >= 0 then $2 := 0; end if; end loop; RETURN NEXT enr; RETURN; end; ' LANGUAGE 'plpgsql';
C'est certainement une bétise mais je ne vois. Quelqu'un aurait-il une idée? Merci pour vos avis.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 ERROR: "$2" is declared CONSTANT CONTEXTE : compile of PL/pgSQL function "soustraire_qtite" near line 13
Partager