Files
lux/EgwCoreLib.Lux.Data/SqlScripts/Stored/stp_counterGetNextBlock.sql
T
2026-01-21 16:43:48 +01:00

42 lines
1013 B
SQL

CREATE PROCEDURE stp_counterGetNextBlock(
IN pYear INT,
IN pName VARCHAR(100),
IN pCount INT,
OUT pStart INT
)
LANGUAGE SQL
NOT DETERMINISTIC
CONTAINS SQL
SQL SECURITY DEFINER
COMMENT 'Ritorna il prossimo valore di contatore per il flusso richiesto'
BEGIN
DECLARE vOld INT;
DECLARE vNew INT;
-- Leggo il valore precedente (se esiste)
SELECT Counter INTO vOld
FROM utils_counter
WHERE RefYear = pYear AND CountName = pName
FOR UPDATE;
IF vOld IS NULL THEN
-- Primo inserimento
SET vOld = 0;
SET vNew = pCount;
INSERT INTO utils_counter (RefYear, CountName, Counter)
VALUES (pYear, pName, vNew)
ON DUPLICATE KEY UPDATE Counter = VALUES(Counter);
ELSE
-- Incremento esistente
SET vNew = vOld + pCount;
UPDATE utils_counter
SET Counter = vNew
WHERE RefYear = pYear AND CountName = pName;
END IF;
-- pStart = primo valore del blocco
SET pStart = vOld + 1;
END;