好的,以下是一个简单的MySQL存储过程,可以读取指定路径下的txt文件并将其数据导入到MySQL数据库中。需要注意的是,该存储过程只适用于数据格式为逗号分隔的txt文件,且第一行为表头的情况。
```
DELIMITER $$
CREATE PROCEDURE import_txt(IN file_path VARCHAR(255), IN table_name VARCHAR(255))
BEGIN
DECLARE line VARCHAR(255);
DECLARE col1 VARCHAR(255);
DECLARE col2 VARCHAR(255);
DECLARE col3 VARCHAR(255);
DECLARE col4 VARCHAR(255);
DECLARE col5 VARCHAR(255);
DECLARE col6 VARCHAR(255);
DECLARE col7 VARCHAR(255);
DECLARE col8 VARCHAR(255);
DECLARE col9 VARCHAR(255);
DECLARE done INT DEFAULT FALSE;
DECLARE cur CURSOR FOR SELECT * FROM information_schema.columns WHERE table_name = table_name;
DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = TRUE;
SET @sql = CONCAT('LOAD DATA LOCAL INFILE "', file_path, '" INTO TABLE ', table_name, ' FIELDS TERMINATED BY "," LINES TERMINATED BY "\r\n" IGNORE 1 LINES (', col1, ',', col2, ',', col3, ',', col4, ',', col5, ',', col6, ',', col7, ',', col8, ',', col9, ')');
OPEN cur;
read_loop: LOOP
FETCH cur INTO line;
IF done THEN
LEAVE read_loop;
END IF;
IF line.COLUMN_NAME = 'col1' THEN
SET col1 = CONCAT('`', line.COLUMN_NAME, '`');
ELSEIF line.COLUMN_NAME = 'col2' THEN
SET col2 = CONCAT('`', line.COLUMN_NAME, '`');
ELSEIF line.COLUMN_NAME = 'col3' THEN
SET col3 = CONCAT('`', line.COLUMN_NAME, '`');
ELSEIF line.COLUMN_NAME = 'col4' THEN
SET col4 = CONCAT('`', line.COLUMN_NAME, '`');
ELSEIF line.COLUMN_NAME = 'col5' THEN
SET col5 = CONCAT('`', line.COLUMN_NAME, '`');
ELSEIF line.COLUMN_NAME = 'col6' THEN
SET col6 = CONCAT('`', line.COLUMN_NAME, '`');
ELSEIF line.COLUMN_NAME = 'col7' THEN
SET col7 = CONCAT('`', line.COLUMN_NAME, '`');
ELSEIF line.COLUMN_NAME = 'col8' THEN
SET col8 = CONCAT('`', line.COLUMN_NAME, '`');
ELSEIF line.COLUMN_NAME = 'col9' THEN
SET col9 = CONCAT('`', line.COLUMN_NAME, '`');
END IF;
END LOOP;
SET @sql = CONCAT('LOAD DATA LOCAL INFILE "', file_path, '" INTO TABLE ', table_name, ' FIELDS TERMINATED BY "," LINES TERMINATED BY "\r\n" IGNORE 1 LINES (', col1, ',', col2, ',', col3, ',', col4, ',', col5, ',', col6, ',', col7, ',', col8, ',', col9, ')');
PREPARE stmt FROM @sql;
EXECUTE stmt;
CLOSE cur;
END$$
DELIMITER ;
```
使用方法:
1. 将上述存储过程复制到MySQL客户端中执行,创建存储过程。
2. 调用存储过程,传入文件路径和表名。
```
CALL import_txt('file_path', 'table_name');
```
其中,`file_path`为txt文件的绝对路径,`table_name`为导入数据的目标表名。