Aggiunta e refresh stored

This commit is contained in:
Samuele Locatelli
2026-01-21 16:43:48 +01:00
parent 95ea5c504f
commit 455a86c17c
4 changed files with 88 additions and 1 deletions
@@ -0,0 +1,40 @@
DROP PROCEDURE IF EXISTS `stp_ProdBatch_insert`;
CREATE PROCEDURE `stp_ProdBatch_insert`(
IN `pDescription` VARCHAR(255),
IN `pDueDate` DATETIME,
IN `pPrefix` VARCHAR(10), -- prefisso x Batch
IN `pYear` INT -- anno di riferimento x Tag
)
LANGUAGE SQL
NOT DETERMINISTIC
CONTAINS SQL
SQL SECURITY DEFINER
COMMENT 'Insert di una colonna Batch con calcolo contestuale del relativo TAG'
BEGIN
DECLARE vIdx INT;
DECLARE vYear INT;
DECLARE vNewBatchTag VARCHAR(50);
DECLARE vNewID INT;
SET vYear = IF(pYear IS NULL OR pYear = 0, YEAR(CURDATE()), pYear);
-- 1. Recuperiamo il contatore (riutilizzando la tua GetNextCounter)
CALL stp_counterGetNext(vYear, pPrefix, vIdx);
-- Costruiamo il BatchTag finale (BC.202600000001)
SET vNewBatchTag = UPPER(CONCAT(pPrefix, vYear, LPAD(HEX(vIdx), 8, '0')));
-- 2. Inserimento del record
INSERT INTO production_batch (Description, DueDate, BatchTag)
VALUES (pDescription, pDueDate, vNewBatchTag);
-- 3. Recuperiamo l'ID appena generato (Auto Increment)
SET vNewID = LAST_INSERT_ID();
-- 4. Restituzione del record completo (i nomi colonne devono coincidere col Modello C#)
SELECT *
FROM production_batch
WHERE ProdBatchID = vNewID;
END;
@@ -0,0 +1,46 @@
DROP PROCEDURE IF EXISTS `stp_ProdOdl_UpdateTag`;
CREATE PROCEDURE `stp_ProdOdl_UpdateTag`(
IN pProdBatchID INT,
IN pPrefix VARCHAR(10), -- prefisso x ODL
IN pYear INT
)
LANGUAGE SQL
NOT DETERMINISTIC
CONTAINS SQL
SQL SECURITY DEFINER
COMMENT 'Fix colonna calcolata OdlTag nel nuovo formato con contatori annuali, dopo creazione x ricerca e indicizzazione'
main_block: BEGIN
DECLARE vYear INT;
DECLARE vCount INT;
DECLARE vStart INT;
SET vYear = IF(pYear IS NULL OR pYear = 0, YEAR(CURDATE()), pYear);
SELECT COUNT(*) INTO vCount
FROM production_odl
WHERE OdlTag IS NULL
OR OdlTag = ''
OR (ProdBatchID = pProdBatchID AND pProdBatchID > 0);
IF vCount = 0 THEN
LEAVE main_block;
END IF;
CALL stp_counterGetNextBlock(vYear, pPrefix, vCount, vStart);
UPDATE production_odl po
JOIN (
SELECT PrododlID,
ROW_NUMBER() OVER (ORDER BY ProdODLID) AS rn
FROM production_odl
WHERE OdlTag IS NULL
OR OdlTag = ''
OR (ProdBatchID = pProdBatchID AND pProdBatchID > 0)
) AS x ON x.ProdODLID = po.ProdODLID
SET po.OdlTag = CONCAT(
pPrefix, vYear, '.',
LPAD(HEX(vStart + x.rn -1), 8, '0')
);
END main_block;
@@ -35,7 +35,7 @@ BEGIN
UPDATE utils_counter
SET Counter = vOld
WHERE RefYear = pYear AND CountName = pName;
END IF;
SET pValue = vOld;
END
@@ -27,6 +27,7 @@ BEGIN
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;