Những gì bạn đang cố gắng thực hiện không thể thực hiện được trong một quy trình được lưu trữ, dù có hoặc không có một tuyên bố đã chuẩn bị sẵn.
Bạn có thể làm điều gì đó tương tự như sau:
DELIMITER $$
DROP PROCEDURE IF EXISTS test_proc $$
CREATE PROCEDURE test_proc(param1 varchar(20))
BEGIN
CASE UPPER(param1)
WHEN 'MICROSECOND' THEN select DATE_SUB(now(), INTERVAL 1 MICROSECOND);
WHEN 'SECOND' THEN select DATE_SUB(now(), INTERVAL 1 SECOND);
WHEN 'MINUTE' THEN select DATE_SUB(now(), INTERVAL 1 MINUTE);
WHEN 'HOUR' THEN select DATE_SUB(now(), INTERVAL 1 HOUR);
WHEN 'DAY' THEN select DATE_SUB(now(), INTERVAL 1 DAY);
WHEN 'WEEK' THEN select DATE_SUB(now(), INTERVAL 1 WEEK);
WHEN 'MONTH' THEN select DATE_SUB(now(), INTERVAL 1 MONTH);
WHEN 'QUARTER' THEN select DATE_SUB(now(), INTERVAL 1 QUARTER);
WHEN 'YEAR' THEN select DATE_SUB(now(), INTERVAL 1 YEAR);
ELSE select 'UNEXPECTED UNIT';
END CASE;
END $$
DELIMITER ;