Mysql 程序定期将数据从一个数据库移动到另一个数据库

标签 mysql database stored-procedures rdbms

我正在尝试动态地完成以下事情。

基本目标是将记录从第一个数据库表移动到第二个数据库表。 数据库表名称总是会因轮换而发生变化。 记录也会定期添加到第一个表中,因此我想定期调用此过程 带有参数第一个表、第二个表和第二个表最后一个元素的特殊 db1 id。所以使用这个id,我只能插入新条目。

为此,我正在尝试编写这样的程序。数据库是mysql。

DROP PROCECURE IF EXISTS `foo_bar`;

DELIMITER $$

CREATE PROCEDURE `foo_bar`(IN var_dbtable1 varchar(50), IN var_dbtable2 varchar(50))
BEGIN

    --get db1_id of last record from second table    
    DECLARE v_lst_db1_id bigint(21);

    SET @query1 = CONCAT("SELECT id INTO ", v_lst_db1_id, " FROM ", var_dbtable2, " ORDER BY id DESC LIMTI 1");
             PREPARE stmt1 from @query1;
             EXECUTE stmt1;
             DEALLOCATE PREPARE stmt1;

    -- insert records in db2 from db1 whose ids are greater than last id.
    SET @query2 = CONCAT("INSERT INTO ", var_dbtable2, "(col1, col2, col3)
            SELECT co1, col2, col3
            FROM ", var_dbtable1, " WHERE id > ", v_lst_db1_id, "");
            PREPARE stmt2 from @query2;
            EXECUTE stmt2;
            DEALLOCATE PREPARE stmt2;

END $$

DELIMTER ;

稍后我想调用这个程序

call foo_bar("foo.foo1", "bar.bar1");

但是这个程序似乎有问题。特别是第一个查询的一部分。我是不是漏掉了什么?

提前致谢。

更新: 错误消息:

您的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册,了解在第 1 行“NULL”附近使用的正确语法

最佳答案

尝试这样:

SET @query1 = CONCAT("SELECT id INTO v_lst_db1_id FROM ", var_dbtable2, " ORDER BY id DESC LIMTI 1");
         PREPARE stmt1 from @query1;
         EXECUTE stmt1;
         DEALLOCATE PREPARE stmt1;

您想要使用变量,而不是变量所保存的值。在本例中null

您的查询是

SELECT id INTO NULL FROM ...

关于Mysql 程序定期将数据从一个数据库移动到另一个数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26841690/

相关文章:

mysql - 数据库规范化练习

asp.net - 如何在 SQL Server 存储过程中用逗号分隔(分割)字符串

php - 按日期排序的记录在 View 和存储过程中正确显示,但在 PHP 结果中显示乱序

sql-server - 退出存储过程

sql - 用户消息数据库架构?

mysql - 使用 NOT EQUAL 运算符时处理 NULL

php - 如何设置这个全文索引

php - 检查数据库凭据是否有效?

mysql - 从 mySQL 中的两个连接表中选择特定行

python - 使用select和values在mysql中一次在表中插入三列