我正在使用动态字段名称创建存储过程。假设我有一个用户表,他们的b'days N周年纪念日,加入日期。我希望在动态的基础上选择记录和计数。我在SP中使用了params来选择列。
CREATE DEFINER=`root`@`%` PROCEDURE `GetAllRecords`(IN recordType VARCHAR(255))
BEGIN DECLARE fieldName VARCHAR(100) DEFAULT '';
CASE recordType
WHEN 'J_Anniversary' THEN
SET fieldName = 'fld_dob';
WHEN 'Anniversary' THEN
SET fieldName = 'fld_anniversary';
WHEN 'Birthday' THEN
SET fieldName = 'fld_dob';
ELSE
SET fieldName = 'fld_dob';
END CASE;
SELECT fld_id, fld_title, fld_name, fld_dob, fld_date_joinning, fld_status, fld_anniversary
FROM `tbl_user_details`
WHERE MONTH(fieldName) = MONTH(CURDATE()) AND DATE_ADD(fieldName, INTERVAL YEAR(CURDATE())- YEAR(fieldName) YEAR) BETWEEN CURDATE() AND DATE_ADD(CURDATE(), INTERVAL 31 DAY)
ORDER BY fieldName ASC; END
我称之为CALL('Birthday');
。但是它产生的空结果会带有警告。我无法追踪警告。 Phpmyadmin没有显示警告。
如果我用静态列名称调用它,则为B'day提取2条记录。我的SP在哪里错了?