所以我有一个存储过程,其中的函数是找出包含过期或结束名称(Datetime类型(的列,然后找出该列的记录,其中包含90天后的时间。所以我做了这个存储过程
CREATE DEFINER=`fachry`@`%` PROCEDURE `get_data`()
BEGIN
DECLARE i VARCHAR(100);
DECLARE a VARCHAR(100);
DECLARE cur1 CURSOR FOR SELECT DISTINCT
TABLE_NAME, COLUMN_NAME FROM information_schema.columns WHERE (COLUMN_NAME LIKE 'End%' OR COLUMN_NAME LIKE 'Expired%') AND TABLE_SCHEMA='brambang_uom'
AND TABLE_NAME NOT LIKE 'discount%' ;
OPEN cur1;
read_loop: LOOP
FETCH cur1 INTO i,a;
-- SELECT i,a; -- printing table name
SET @s = CONCAT('select * from ', i, ' where ', a, ' >= CURDATE() + INTERVAL 90 DAY AND ' , a, ' <
CURDATE() + INTERVAL 91 DAY');
PREPARE stmt1 FROM @s;
EXECUTE stmt1;
DEALLOCATE PREPARE stmt1;
END LOOP read_loop;
CLOSE cur1;
END
但idk为什么它一直错误
Error Code: 1329. No data - zero rows fetched, selected or processed
您尚未声明处理程序-
drop procedure if exists p;
delimiter $$
CREATE PROCEDURE p()
BEGIN
DECLARE i VARCHAR(100);
DECLARE a VARCHAR(100);
declare finished int default 1;
DECLARE cur1 CURSOR FOR
SELECT TABLE_NAME, COLUMN_NAME
FROM information_schema.columns
WHERE (COLUMN_NAME LIKE 'End%' OR COLUMN_NAME LIKE 'Expired%')
AND TABLE_SCHEMA='sandbox'
AND TABLE_NAME NOT LIKE 'discount%' ;
DECLARE CONTINUE HANDLER FOR NOT FOUND SET FINISHED = 0;
OPEN cur1;
read_loop: LOOP
IF FINISHED = 0 THEN
LEAVE read_loop;
END IF;
FETCH cur1 INTO i,a;
#SELECT i,a; -- printing table name
SET @s = CONCAT('select * from ', i, ' where ', a, ' >= CURDATE() + INTERVAL 90 DAY AND ' , a, ' <
CURDATE() + INTERVAL 91 DAY');
PREPARE stmt1 FROM @s;
EXECUTE stmt1;
DEALLOCATE PREPARE stmt1;
#select @s;
END LOOP read_loop;
CLOSE cur1;
END $$
delimiter ;