如何使用mysql中的存储过程将记录从一个表保存到另一个表?

时间:2012-11-01 20:20:24

标签: mysql sql scripting data-migration

我试过了,但我不知道怎么做。 我想使用存储过程将记录从一个表迁移到另一个表。我已经开始使用一个简单的过程(不确定是对还是错)来根据某些条件打印记录。这是我试过的代码:

CREATE PROCEDURE curdemo()
BEGIN
 DECLARE done INT DEFAULT FALSE;
  DECLARE a VARCHARCHAR(16);
  DECLARE cur1 CURSOR FOR SELECT user_name FROM discovery_configuration;
   OPEN cur1;
  REPEAT 
    FETCH cur1 INTO a;
     IF a!=' ' THEN 
        select a;
    END IF;
  END REPEAT;
   CLOSE cur1;
END;

如果user_name列为空,我需要一个存储过程将这些记录迁移到另一个表。谁能指导我?

3 个答案:

答案 0 :(得分:2)

为什么它必须是存储过程?

您可以在一个查询中复制记录,然后用另一个查询删除它们。

复制到user_name为空的另一个表:

INSERT INTO other_table (id, user_name, other)
SELECT (id, user_name, other)
FROM discovery_configuration
WHERE user_name IS NULL OR TRIM(user_name) = '';

然后,在复制这些记录后,从原始表中删除:

DELETE FROM discovery_configuration WHERE id IN (SELECT id FROM other_table);

答案 1 :(得分:1)

您是插入所有列还是仅插入用户名?如果你要将所有列插入到另一个表中,你应该将所有列都放入光标然后插入到表中..并保留此...基于上面提供的信息我得到了你想要迁移的数据如果用户名列为空,则从一个表到另一个表...对吗? 然后你有一个简单的方法来做到这一点。

INSERT INTO A(COUMNS DETAILS)从B中选择字段B.USERNAME ='';

试试这个让我知道.. !!

-Rajesh Uddem

答案 2 :(得分:0)

怎么样:

将userName插入newTable 从discovery_configuration中选择userName,其中cur1!=''