1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75
|
CREATE PROCEDURE `Fusion`(id_source INT, id_dest INT)
BEGIN
SET @cptClt = 0;
SET @cptTables = 0;
SET @cptTablesCtrl = 0;
IF (id_source IS NULL OR
id_dest IS NULL) THEN
SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT = 'id_source et id_dest ne peuvent être null.';
ELSEIF id_source = id_dest THEN
SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT = 'Impossible de transférer un client sur lui même.';
END IF;
SELECT @cptClt := COUNT(*)
FROM client
WHERE id = id_source;
IF @cptClt <> 1 THEN
SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT = 'Client source inexistant.';
END IF;
SELECT @cptClt := COUNT(*)
FROM client
WHERE id = id_dest;
IF @cptClt <> 1 THEN
SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT = 'Client de destination inexistant.';
END IF;
DROP TABLE IF EXISTS ps_Fusion_update_tables;
CREATE TEMPORARY TABLE ps_Fusion_update_tables (
id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
table_schema VARCHAR(64) NOT NULL DEFAULT '__DB__',
table_name VARCHAR(64) NOT NULL,
column_name VARCHAR(64) NOT NULL,
condition_update VARCHAR(400) NULL DEFAULT NULL
)
CHARACTER SET utf8 COLLATE utf8_general_ci;
INSERT INTO ps_Fusion_update_tables (table_name, column_name, condition_update)
VALUES ('table_1', 'id_client', NULL),
('table_2', 'client', 'type = 1'),
('client', 'id', NULL);
/**
* Contrôle des combinaisons tables/colonnes
*/
SELECT @cptTables := COUNT(*)
FROM INFORMATION_SCHEMA.COLUMNS c INNER JOIN
ps_Fusion_update_tables u ON u.table_name = c.table_name AND
u.column_name = c.column_name AND
u.table_schema = c.table_schema;
SELECT @cptTablesCtrl := COUNT(*)
FROM ps_Fusion_update_tables;
IF (@cptTables <> @cptTablesCtrl) THEN
DROP TABLE ps_Fusion_update_tables;
SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT = 'Une des tables ne contient pas la colonne associée. Vérifier la PS.';
END IF;
SELECT 'OK on peut commencer';
DROP TABLE ps_Fusion_update_tables;
END |
Partager