How can I retain inactive users for the stored procedure below

Issue

Im trying to retain the data from inactive users from the past 12 months
And im getting a syntax error 1064:

near ‘IFNULL(ub.updated_at, ub.inserted_at) < ( CONCAT(YEAR(NOW()), "_", MONTH(NOW())’ at line 2 .

Here’s the sample stored procedure

DELIMITER $$ 

CREATE PROCEDURE `logdb_user_breaks_delete`(

IN log_database VARCHAR(255) CHARACTER SET utf8mb4, 

IN retention_logdb INT(11) )

BEGIN SET @v = concat('DELETE FROM `',log_database ,'`.`user_breaks` ub WHERE

IFNULL(ub.updated_at, ub.inserted_at) < (CONCAT(YEAR(NOW()), "-", MONTH(NOW()), "-

", "01") - INTERVAL ',retention_logdb,' MONTH);');

PREPARE stm FROM @v;

EXECUTE stm; 

DEALLOCATE PREPARE stm;

END$$ DELIMITER ;

Im doing it in heidi sql version 10

Here’s how I call the stored procedure :

CALL procedure_name(db_name,12);

Thanks for the help.

Solution

Until MySQL 8.0, single-table DELETE statements cannot assign an alias to the table name. So remove the ub alias.

DELIMITER $$ 

CREATE PROCEDURE `logdb_user_breaks_delete`(IN log_database VARCHAR(255) CHARACTER SET utf8mb4, IN retention_logdb INT(11) )

BEGIN
    SET @v = concat('DELETE FROM `',log_database ,'`.`user_breaks` WHERE
IFNULL(updated_at, inserted_at) < (CONCAT(YEAR(NOW()), "-", MONTH(NOW()), "-", "01") - INTERVAL ', retention_logdb, ' MONTH);');

    PREPARE stm FROM @v;
    EXECUTE stm;
    DEALLOCATE PREPARE stm;

END$$
DELIMITER ;

Answered By – Barmar

This Answer collected from stackoverflow, is licensed under cc by-sa 2.5 , cc by-sa 3.0 and cc by-sa 4.0

Leave a Reply

(*) Required, Your email will not be published