【发布时间】: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
员工表存在的地方,但它没有将员工作为参数
【问题讨论】:
-
你需要使用动态sql
-
检查这个帖子它可能对你有帮助stackoverflow.com/questions/6609778/…
-
感谢您的参考,是的,我明白了
标签: mysql