【问题标题】:mysql stored procedure to deleted data from tablemysql存储过程从表中删除数据
【发布时间】:2014-09-23 10:04:56
【问题描述】:

我正在尝试在 MySQL 中编写一个存储过程作为清理器,它将用于从表中删除数据(所有表的一个存储过程)

    CREATE PROCEDURE `cleaner`(
     IN table_name_in varchar(255),
     IN field_name_in varchar(255),
     IN day_in int
    )
    BEGIN
    DECLARE FoundCount INT;
    SELECT COUNT(1) INTO FoundCount
    FROM table_name_in where STR_TO_DATE(field_name_in, "%Y-%m-%d") < STR_TO_DATE(NOW() - INTERVAL day_in DAY, "%Y-%m-%d");
    IF FoundCount = 1 THEN
       SET SQL_SAFE_UPDATES = 0;
       DELETE from table_name_in where STR_TO_DATE(field_name_in, "%Y-%m-%d") < STR_TO_DATE(NOW()- INTERVAL day_in DAY, "%Y-%m-%d");
        SET SQL_SAFE_UPDATES = 1;
        select  "true" as isDeleted , "true" as isValuePresent ;
    else
        select  "false" as isDeleted , "false" as isValuePresent ;
   END IF;
   END

我称之为

   call cleaner('employee','created_on',30)

这意味着使用字段 created_on 从员工表中删除 30 天前的所有记录

但它给了我一条错误消息说

 Error Code: 1146. Table 'table_name_in' doesn't exist

员工表存在的地方,但它没有将员工作为参数

【问题讨论】:

标签: mysql


【解决方案1】:

这对我有用

          CREATE PROCEDURE `cleaner`(
           IN table_name_in varchar(255),
           IN field_name_in varchar(255),
           IN day_in int
          )
          BEGIN
            SET SQL_SAFE_UPDATES = 0;
            SET @sql = CONCAT('DELETE FROM ',table_name_in,' WHERE STR_TO_DATE(',field_name_in,', "%Y-%m-%d") < STR_TO_DATE(NOW() - INTERVAL ',day_in,' DAY, "%Y-%m-%d")');
            PREPARE s1 from @sql;
            EXECUTE s1;
            SET SQL_SAFE_UPDATES = 1;
         END

来源:Mysql stored procedure don't take table name as parameter

【讨论】:

    猜你喜欢
    • 2021-09-17
    • 1970-01-01
    • 1970-01-01
    • 2018-08-22
    • 1970-01-01
    • 2019-04-12
    • 1970-01-01
    • 2018-07-13
    • 1970-01-01
    相关资源
    最近更新 更多