假设有一个员工打卡表,其中第一列为姓名,第二列为3月1日员工打卡时间,第二列为3月2日员工打卡时间,第四列为员工3月3日打卡时间。现要将该表转换为姓名、日期、打卡时间三个列的表形式。要求使用mysql存储过程完成。
时间: 2024-05-20 08:18:12 浏览: 59
以下是实现该要求的MySQL存储过程:
DELIMITER //
CREATE PROCEDURE trans_table()
BEGIN
DECLARE done INT DEFAULT FALSE;
DECLARE name VARCHAR(255);
DECLARE col_date DATE;
DECLARE col_time TIME;
DECLARE cur CURSOR FOR SELECT * FROM punch_card_table;
DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = TRUE;
CREATE TABLE trans_table (
name VARCHAR(255),
date DATE,
time TIME
);
OPEN cur;
read_loop: LOOP
FETCH cur INTO name, col_date, col_time;
IF done THEN
LEAVE read_loop;
END IF;
INSERT INTO trans_table (name, date, time) VALUES (name, col_date, col_time);
END LOOP;
CLOSE cur;
END //
DELIMITER ;
其中,假设原始打卡表为punch_card_table。该存储过程首先声明了需要用到的变量,包括游标、姓名、日期和打卡时间等。然后创建了一个新的表trans_table,用于存储转换后的数据。接着,通过游标遍历原始打卡表的每一行,将姓名、日期和打卡时间插入到新表中。最后关闭游标。
使用该存储过程,只需要执行以下语句即可完成转换:
CALL trans_table();
阅读全文