Devo convertire una funzione che calcola lo sconto commerciale il postgresql;
Ma non riesco a capire dove sbaglio …
CREATE OR REPLACE FUNCTION f_sconti (valore NUMERIC, sconto TEXT)
RETURNS NUMERIC AS $$
DECLARE
elementi INTEGER;
contatore INTEGER;
stringa VARCHAR(15);
parte VARCHAR(15);
resto VARCHAR(15);
BEGIN
SET contatore = 0; /* imposto il contatore a 0' */
SET stringa = REPLACE(sconto,",","."); /* prima rimpiazzo le virgole con i punti */
SET stringa = REPLACE(stringa,"+",",+"); /* poi rimpiazzo i '+' con ',+' */
SET stringa = REPLACE(stringa,"-",",-"); /* poi rimpiazzo i '-' con ',-' */
SET elementi = CHAR_LENGTH(stringa) - CHAR_LENGTH(REPLACE(stringa,",","")) + 1;
/* se sconto non valorizzato allora ritorno il valore senza sconto */
IF sconto = "" OR sconto IS NULL THEN
RETURN valore;
END IF;
/* se ho solo un elemento allora ritorno lo sconto con un solo elemento */
IF elementi = 1 then
SET valore = valore - (valore * CAST(stringa AS DECIMAL(12,4)) / 100);
RETURN valore;
END IF;
/* inizio il loop per ricavare ogni parte */
[ciclo]
LOOP
SET contatore = contatore + 1;
IF contatore = 1 then
set parte = SUBSTRING_INDEX(stringa,",",1);
else
set parte = SUBSTRING_INDEX(SUBSTRING_INDEX(stringa,",",contatore),",", -1);
END IF;
set valore = valore - (valore * CAST(parte AS DECIMAL(12,4)) / 100);
IF contatore = elementi THEN
END [ciclo];
END IF;
END LOOP [ciclo];
RETURN valore;
END;
$$ LANGUAGE plpgsql;