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
| DROP PROCEDURE IF EXISTS p_insert_visites//
CREATE PROCEDURE p_insert_visites( bdd VARCHAR(25), date_visite DATETIME, clefs TEXT, valeurs TEXT )
BEGIN
DECLARE annee INT;
DECLARE num_semaine INT;
DECLARE new_table VARCHAR(13);
DECLARE champ1 VARCHAR(13);
DECLARE done INT DEFAULT 0;
DECLARE cur_tables CURSOR FOR SHOW TABLES LIKE "visites%";
DECLARE CONTINUE HANDLER FOR SQLSTATE '02000' SET done = 1;
SET annee = DATE_FORMAT( date_visite, '%Y' );
SET num_semaine = DATE_FORMAT( date_visite, '%v' );
SET new_table = CONCAT( 'visites', annee, num_semaine );
SET @sql_create = CONCAT( 'CREATE TABLE IF NOT EXISTS ', bdd, '.', new_table, ' LIKE modele' );
PREPARE s_create_table FROM @sql_create;
EXECUTE s_create_table;
DEALLOCATE PREPARE s_create_table;
SET @sql_select = CONCAT( 'SELECT COUNT(*) INTO @nb_enreg FROM ', bdd, '.', new_table );
PREPARE s_select FROM @sql_select;
EXECUTE s_select;
DEALLOCATE PREPARE s_select;
IF @nb_enreg = 0 THEN
BEGIN
OPEN cur_tables;
SET @sep = '';
SET @liste_tables = '';
REPEAT
FETCH cur_tables INTO champ1;
IF NOT done THEN
SET @chp1 = champ1;
SET @liste_tables = CONCAT( @liste_tables, @sep, @chp1 );
END IF;
SET @sep = ',';
UNTIL done END REPEAT;
CLOSE cur_tables;
SET @sql_alter = CONCAT( 'ALTER TABLE `m_visites` UNION(', @liste_tables ,') INSERT_METHOD=LAST' );
PREPARE s_alter FROM @sql_alter;
EXECUTE s_alter;
DEALLOCATE PREPARE s_alter;
END;
END IF;
SET @sql_insert = CONCAT( 'INSERT INTO ', bdd, '.', new_table, '(', clefs, ')', ' VALUES(', valeurs, ')' );
PREPARE s_insert FROM @sql_insert;
EXECUTE s_insert;
DEALLOCATE PREPARE s_insert;
END// |
Partager