Files
lux/EgwCoreLib.Lux.Data/SqlScripts/Stored/stp_counterGetNext.sql
T

42 lines
954 B
SQL

DROP PROCEDURE IF EXISTS `stp_counterGetNext`;
CREATE PROCEDURE stp_counterGetNext(
IN `pYear` INT,
IN `pName` VARCHAR(100),
OUT `pValue` INT
)
LANGUAGE SQL
NOT DETERMINISTIC
CONTAINS SQL
SQL SECURITY DEFINER
COMMENT 'Ritorna il prossimo valore di contatore per il flusso richiesto con upsert'
BEGIN
DECLARE vOld INT;
-- Provo a leggere il valore corrente
SELECT Counter INTO vOld
FROM utils_counter
WHERE RefYear = pYear AND CountName = pName
FOR UPDATE;
IF vOld IS NULL THEN
-- Primo valore
SET vOld = 0;
INSERT INTO utils_counter (RefYear, CountName, Counter)
VALUES (pYear, pName, 1)
ON DUPLICATE KEY UPDATE Counter = VALUES(Counter);
SET pValue = 1;
ELSE
-- Incremento
SET vOld = vOld + 1;
UPDATE utils_counter
SET Counter = vOld
WHERE RefYear = pYear AND CountName = pName;
SET pValue = vOld;
END IF;
END;