【发布时间】:2018-07-10 06:08:38
【问题描述】:
我使用的数据库包含数百个具有相同结构和相同语法的表。每天都会创建更多的表,因此数据库也在不断增长。为了动态追加越来越多的表,我使用了MySQL 过程,它工作得很好。
然而,一旦添加,我就无法识别行的来源,因为这些表不包含任何要区分的信息。因此,我想在以下过程中集成MySQL 语句,以自动从information_schema 中获取TABLE_NAME,并将其设置为相应表中的值。我已经为此创建了一个专栏,但在调整程序时遇到了困难。我真的很感激任何帮助或建议来解决这个问题。
CREATE PROCEDURE getallarbeitsplaene(recordOffset INT, recordCount INT)
BEGIN
DECLARE tableName VARCHAR(255);
DECLARE endOfTables INT DEFAULT 0;
DECLARE cur CURSOR FOR
SELECT t.table_name
FROM information_schema.tables t
WHERE t.table_schema = DATABASE()
AND t.table_type='BASE TABLE'
AND NOT table_name LIKE '%x_arbeitsplan'
AND table_name LIKE '%_arbeitsplan';
DECLARE CONTINUE HANDLER FOR NOT FOUND SET endOfTables = 1;
DROP TEMPORARY TABLE IF EXISTS alle_plaene;
CREATE TEMPORARY TABLE alle_plaene (
`ID` INT(11) NOT NULL,
`AP` VARCHAR(8) NOT NULL,
`Name` VARCHAR(128) NOT NULL,
`Baugruppentyp` VARCHAR(128) NOT NULL,
`Basiseinheit` VARCHAR(8) NOT NULL,
`Zeit_Basiseinheit` NUMERIC(10,0) NOT NULL,
`vor_OF` BINARY(1) NOT NULL,
`zwischen_OF` BINARY(1) NOT NULL,
`nach_OF` BINARY(1) NOT NULL,
`Annahme_Grundlage` VARCHAR(64) NOT NULL,
`Budget_AG_Bankraum` VARCHAR(7) NOT NULL,
`Budget_AG_FU` VARCHAR(7) NOT NULL,
`Datum_voraus` DATE,
`Budget_voraus` INT(11) NOT NULL
) ENGINE=MEMORY;
OPEN cur;
tablesLoop: LOOP
FETCH cur INTO tableName;
IF endOfTables = 1 THEN
LEAVE tablesLoop;
END IF;
SET @s = CONCAT('INSERT INTO alle_plaene (Name, Baugruppentyp, Basiseinheit, Zeit_Basiseinheit, vor_OF, zwischen_OF, nach_OF, Annahme_Grundlage, Budget_AG_Bankraum, Budget_AG_FU, Datum_voraus, Budget_voraus) SELECT `Name`, `Baugruppentyp`, `Basiseinheit`, `Zeit_Basiseinheit`, `vor_OF`, `zwischen_OF`, `nach_OF`, `Annahme_Grundlage`, `Budget_AG_Bankraum`, `Budget_AG_FU`, `Datum_voraus`, `Budget_voraus` FROM ', tableName, ' ORDER BY ID DESC');
PREPARE stmt FROM @s;
EXECUTE stmt;
END LOOP;
CLOSE cur;
SELECT `Name`, `Baugruppentyp`, `Basiseinheit`, `Zeit_Basiseinheit`, `vor_OF`, `zwischen_OF`, `nach_OF`, `Annahme_Grundlage`, `Budget_AG_Bankraum`, `Budget_AG_FU`, `Datum_voraus`, `Budget_voraus` FROM alle_plaene;
END
【问题讨论】:
标签: mysql procedure information-schema tablename