简体   繁体   English

MySQL存储过程选择检查插入

[英]MySQL Stored Procedure Select Check Insert

So I'm trying to create a stored procedure in MySQL version 5.5. 因此,我试图在MySQL 5.5版中创建一个存储过程。 I'm not sure what is wrong but what I want to accomplish is. 我不确定什么是错的,但是我想完成的是。

Get record From Table-A that over 7 days old. 从表A获取记录,该记录已存在7天了。 And then insert into Table-B, but I need to check if it is exist in Table B. If it is exists then skip, else Insert it. 然后插入表B,但是我需要检查表B中是否存在。如果存在,则跳过,否则插入。

So here is my code: 所以这是我的代码:

DROP PROCEDURE IF EXISTS `move_record`;
DELIMITER //
CREATE PROCEDURE `move_record`()
BEGIN
        DECLARE done INT DEFAULT FALSE;
        DECLARE dt DATETIME;
        DECLARE uid,value BIGINT(20);
        DECLARE category VARCHAR(30);
        DECLARE data,comments VARCHAR(255);
        DECLARE cancel TINYINT(1) DEFAULT NULL;

        DECLARE curs CURSOR FOR SELECT `datetime`,user_id,category,data,comments,cancel FROM `record` WHERE `datetime` < DATE_SUB(CURDATE(), INTERVAL 7 DAY);

        DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = TRUE;

        OPEN curs;

        myloop: LOOP
        FETCH NEXT FROM curs INTO dt,uid,category,data,comments,cancel;
        IF done THEN
            LEAVE myloop;
        END IF;

        IF NOT EXISTS (SELECT * FROM `record_arc`
                        WHERE record_arc.`datetime` = dt
                        AND record.user_id = uid )
        INSERT INTO `record_arc` (`datetime`,user_id,category,data,comments,cancel) VALUES (dt,uid,category,data,comments,cancel);

        END IF;
        END LOOP myloop;

        CLOSE curs;
        DEALLOCATE curs;
END//
DELIMITER ;

Maybe you can do this without a loop. 也许您可以无循环执行此操作。

INSERT INTO `record_arc`(
    `datetime`,
    user_id,
    category,
    data,
    comments,
    cancel
)
SELECT 
    `datetime`,
    user_id,
    category,
    data,
    comments,
    cancel 
FROM `record` r
WHERE 
    `datetime` < DATE_SUB(CURDATE(), INTERVAL 7 DAY)
    AND NOT EXISTS(
        SELECT 1
        FROM `record_arc` r2
        WHERE
            r2.`datetime` = r.`datetime`
            AND r2.user_id = r.user_id
    )

Alias name you used it wrongly. 别名错误地使用了它。 Check the below code 检查以下代码

IF NOT EXISTS (SELECT 1 FROM `record_arc`
                            WHERE record_arc.`datetime` = dt
                            AND record_arc.user_id = uid )

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM