problème de syntaxe pour une fonction
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:
Code:
1 2
|
CREATE TYPE soustraire_qtite AS (id_lot INTEGER, quantite FLOAT); |
J'essaye la fonction suivante dont les requêtes INSERT et UPDATE sont fonctionnelles:
Code:
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'; |
Lorsque j'exécute la requête, il m'affiche le message d'erreur suivant qui correspond à l'instruction $2 := 0;
Code:
1 2 3
|
ERROR: "$2" is declared CONSTANT
CONTEXTE : compile of PL/pgSQL function "soustraire_qtite" near line 13 |
C'est certainement une bétise mais je ne vois. Quelqu'un aurait-il une idée? Merci pour vos avis.