· 8 years ago · May 29, 2018, 01:16 PM
1CREATE TABLE tables_aux(
2 table_name VARCHAR(240) NOT NULL,
3 PRIMARY KEY(table_name)
4);
5
6DELIMITER //
7CREATE PROCEDURE update_tables_aux()
8BEGIN
9 DECLARE taux, tschema VARCHAR(240);
10
11 -- cursor que recupera las tablas del esquema y los compara con la tabla auxiliar
12 DECLARE cur_tables CURSOR FOR
13 SELECT information_schema.tables.table_name tschema, tables_aux.table_name taux
14 FROM information_schema.tables
15 LEFT JOIN tables_aux ON tables_aux.table_name = information_schema.tables.table_name
16 WHERE table_schema = 'esquema_nombre';
17
18 DECLARE CONTINUE HANDLER FOR NOT FOUND SET @done = TRUE;
19
20 OPEN cur_tables;
21
22 read_loop: LOOP
23 FETCH cur_tables INTO tschema, taux;
24
25 IF @done THEN
26 LEAVE read_loop;
27 END IF;
28
29 IF taux IS NULL THEN
30 -- es insertado el nombre de la tabla ya que si se cumple ésta condición
31 -- la tabla es nueva.
32 INSERT INTO tables_aux(table_name) VALUES (tschema);
33 END IF;
34
35 IF tschema IS NULL THEN
36 -- es borrado de la tabla auxiliar ya que si se cumple ésta condición
37 -- la tabla fue borrada.
38 DELETE FROM tables_aux WHERE table_name = taux;
39 END IF;
40 END LOOP;
41
42END; //
43
44call update_tables_aux();
45
46DROP EVENT IF EXISTS run_update_tables_aux;
47
48DELIMITER //
49
50CREATE DEFINER=`root`@`%` EVENT `run_update_tables_aux`
51ON SCHEDULE EVERY 1 MINUTE STARTS '2018-05-29 00:00:00'
52ON COMPLETION NOT PRESERVE ENABLE
53DO
54BEGIN
55 CALL update_tables_aux;
56END //
57
58delimiter //
59CREATE TRIGGER check_new_tables AFTER INSERT ON tables_aux
60 FOR EACH ROW
61 BEGIN
62 -- código.
63 END;//
64delimiter ;