我正在“10.5.24-MariaDB-cll-lve”上的 MyPhpAdmin 中对此进行测试,我无法定义 SET 语句,例如“SET @x = 1;” (来自手册),它们不会失败,但以下语句(除非另一个集合)被标记为失败。我也尝试过DECLARE。
如果我在过程中添加开始/结束,那么它将保存但无法执行,告诉我它失败并显示“...在第 1 行接近 NULL”。
我在这里使用动态 SQL,因为带有静态的 IF 语句也失败了。我已将其导出并添加到此处:
DELIMITER $$
CREATE DEFINER=`wcipporg`@`localhost`
PROCEDURE `BBBBBBBBB`
(IN `SinceDate` DATE,
IN `Totals` VARCHAR(10))
BEGIN
DECLARE selectP1 VARCHAR(999);
SET selectP1 = 'SELECT SinceDate AS `Sales Since`,';
IF Totals = 'N' THEN
SET @selectP2 = 'wp_posts.post_title AS Plant,
wp_terms.name AS Container,';
ELSE
SET @selectP2 = "COALESCE(wp_posts.post_title, '### All Plants ###') AS `Plant Name`,
COALESCE(wp_terms.name, '### All Containers ###') AS `Container`,";
END IF;
SET @selectP3 = 'SUM(sold_plants.how_many) AS Total
FROM wcipporg_Bungalook.sale AS sale
INNER JOIN wcipporg_Bungalook.sold_plants AS sold_plants
ON sale.txn_id = sold_plants.txn_id
INNER JOIN wcipporg_wp596.wpi2_posts AS wp_posts
ON sold_plants.plant_id = wp_posts.ID
INNER JOIN wcipporg_wp596.wpi2_terms AS wp_terms
ON sold_plants.container_id = wp_terms.term_id
WHERE sale.txn_time >= SinceDate';
IF Totals = 'N' THEN
SET @selectP3 = 'GROUP BY wp_posts.post_title ASC, wp_terms.name';
ELSE
SET @selectP3 = 'GROUP BY wp_posts.post_title ASC, wp_terms.name WITH ROLLUP';
END IF;
SET @query = CONCAT(@selectP1, @selectP2, @selectP3, @selectP4);
PREPARE stmt FROM @query;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
END$$
DELIMITER ;
我尝试了各种变体、谷歌搜索和手册,错误消息显示了我的版本的手册,但没有说明如何找到特定的手册,我正在使用:
DECLARE selectP1 VARCHAR(999);
SET selectP1 = 'SELECT SinceDate AS `Sales Since`,';
-->
SET @selectP1 = 'SELECT SinceDate AS `Sales Since`,';
即使用@variables,而不是声明变量。(提示:更改参数和声明的变量,使其具有前导
_
,以区别于列名称等:
_Total
等)