DELIMITER $$ CREATE PROCEDURE insert_data_from_txt(IN file_path VARCHAR(255), IN file_name VARCHAR(255)) BEGIN DECLARE done INT DEFAULT FALSE; DECLARE line VARCHAR(255); DECLARE col1 VARCHAR(8); DECLARE col2 VARCHAR(5); DECLARE col3 VARCHAR(6); DECLARE file_cursor CURSOR FOR SELECT * FROM file_path; DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = TRUE; SET @query = CONCAT('SELECT * FROM ', file_path, file_name); PREPARE stmt FROM @query; OPEN file_cursor; FETCH file_cursor INTO line; WHILE NOT done DO SET col1 = TRIM(SUBSTRING(line, 1, 8)); SET col2 = TRIM(SUBSTRING(line, 9, 5)); SET col3 = TRIM(SUBSTRING(line, 14, 6)); INSERT INTO axsdc (name, aaaa, cccc) VALUES (col1, col2, col3); FETCH file_cursor INTO line; END WHILE; CLOSE file_cursor; END$$ DELIMITER ;
时间: 2024-04-21 07:28:38 浏览: 87
根据你给出的代码,这是一个 MySQL 存储过程,用于从指定路径下的文本文件中读取数据,并将数据插入到 `axsdc` 表中。该存储过程接收两个参数:`file_path` 和 `file_name`,分别表示文本文件所在的路径和文件名。
在存储过程中,首先声明了一些变量,包括 `done`、`line`、`col1`、`col2` 和 `col3`。然后使用 `DECLARE CURSOR` 语句声明了一个游标 `file_cursor`,用于遍历文本文件中的每一行数据。接着使用 `PREPARE` 语句动态生成查询语句,并使用 `OPEN` 语句打开游标。之后进入一个 `WHILE` 循环,遍历文本文件中的每一行数据,并将每一行数据中的前 8 个字符、接下来的 5 个字符和接下来的 6 个字符分别赋值给 `col1`、`col2` 和 `col3` 变量。最后,使用 `INSERT INTO` 语句将这三个变量中的值插入到 `axsdc` 表中。循环结束后,使用 `CLOSE` 语句关闭游标。
需要注意的是,该存储过程中使用了动态 SQL,需要进行预处理和执行,以避免 SQL 注入等安全问题。此外,还需要确保传递给存储过程的参数是合法的,并且对应的表和列都存在。
相关问题
DELIMITER $$ CREATE PROCEDURE insert_data_from_txt(IN file_path VARCHAR(255), IN file_name VARCHAR(255)) BEGIN DECLARE done INT DEFAULT FALSE; DECLARE line VARCHAR(255); DECLARE col1 VARCHAR(8); DECLARE col2 VARCHAR(5); DECLARE col3 VARCHAR(6); DECLARE file_cursor CURSOR FOR SELECT * FROM file_path; DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = TRUE; SET @query = CONCAT('SELECT * FROM ', file_path, file_name); PREPARE stmt FROM @query; OPEN file_cursor; FETCH file_cursor INTO line; WHILE NOT done DO SET col1 = TRIM(SUBSTRING(line, 1, 8)); SET col2 = TRIM(SUBSTRING(line, 9, 5)); SET col3 = TRIM(SUBSTRING(line, 14, 6)); INSERT INTO axsdc (name, aaaa, cccc) VALUES (col1, col2, col3); FETCH file_cursor INTO line; END WHILE; CLOSE file_cursor; END$$ DELIMITER ; CALL insert_data_from_txt('/home/lighthouse/', 'abcd.txt');
这是一个 MySQL 存储过程的代码,用于将一个文本文件中的数据插入到数据库表中。存储过程接受两个参数,一个是文件路径,一个是文件名。存储过程通过游标遍历文件中的每一行数据,并将数据解析成三个字段,然后将这三个字段插入到表 axsdc 中的 name、aaaa、cccc 字段中。最后通过调用存储过程来将数据从文本文件中插入到数据库表中。
写一个MySQL存储过程,从TXT读取数据存到MySQL数据库。数据库只有一个data字段,格式为text。
好的,以下是一个简单的MySQL存储过程,可以从指定的TXT文件中读取数据并将其存储到MySQL数据库中:
```
DELIMITER //
CREATE PROCEDURE load_data_from_txt(IN file_path VARCHAR(255))
BEGIN
DECLARE data TEXT;
DECLARE done INT DEFAULT FALSE;
DECLARE file_handle TEXT;
-- 打开文件
SET file_handle = CONCAT('LOAD_FILE("', file_path, '")');
-- 开始读取文件
DECLARE file_cursor CURSOR FOR SELECT * FROM (SELECT SUBSTRING_INDEX(data, '\n', 1) AS line, SUBSTRING(data, CHAR_LENGTH(SUBSTRING_INDEX(data, '\n', 1)) + 2) AS data FROM (SELECT TRIM(TRAILING '\r' FROM ',\n' + REPLACE(file_handle, '\n', ',\n')) AS data) AS t) AS t2;
DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = TRUE;
OPEN file_cursor;
-- 逐行读取数据并插入到数据库中
read_loop: LOOP
FETCH file_cursor INTO data;
IF done THEN
LEAVE read_loop;
END IF;
INSERT INTO table_name(data) VALUES (data);
END LOOP;
CLOSE file_cursor;
END //
DELIMITER ;
```
你需要将上述代码中的 `file_path` 替换为你的TXT文件的路径,将 `table_name` 替换为你想要插入数据的表的名称。请确保该表中只有一个名为 `data` 的字段,格式为 `text`。
希望这可以帮到你!
阅读全文
相关推荐








