0

我有一个名为 Percentages 的表,其中有一个名为 5StarResults 的列,我想用名为 5star 的存储过程的结果来填充它。

当我使用“Call 5star”时,它只返回一个百分比,我希望将这个百分比插入到百分比表中。

请您帮忙,我试图编辑该过程以包含一个插入,但它总是返回说插入了 0 行。

谢谢

编辑,

存储过程如下

BEGIN
  declare Rating5Total int default 5;
  declare Rating5Win int default 5;
  declare 5StarPerformance decimal;
  set Rating5Total = (select COUNT(Ratings) from vHighPerformance where Ratings = 7);
  set Rating5Win = (select COUNT(Results) from vHighPerformance where Ratings = 7 and Results = 1);
  set 5StarPerformance = Rating5Win*100.0/Rating5Total;
  Select 5StarPerformance;
END
4

1 回答 1

0

如果一个选项是在同一个存储过程中执行 INSERT,下面的代码应该可以工作:

CREATE PROCEDURE `5star`()
BEGIN
    DECLARE Rating5Total INT DEFAULT 5;
    DECLARE Rating5Win INT DEFAULT 5;
    DECLARE 5StarPerformance DECIMAL(18, 3);
    SET Rating5Total := (SELECT COUNT(Ratings) FROM vHighPerformance WHERE Ratings = 7);
    SET Rating5Win := (SELECT COUNT(Results) FROM vHighPerformance WHERE Ratings = 7 AND Results = 1);
    SET 5StarPerformance := Rating5Win*100.0/Rating5Total;
    /* INSERT INTO percentages (percentage) VALUES (5StarPerformance); */
    INSERT INTO percentages (id, percentage) VALUES (1, 5StarPerformance)
       ON DUPLICATE KEY UPDATE percentage = 5StarPerformance;
    SELECT 5StarPerformance;
END$$

可以在SQL Fiddle中看到一个示例。

更新

如果您需要在 table 上记录一条记录percentages,您可以制作一个 UPSERT。请参阅更新的代码。

于 2013-10-11T20:02:05.863 回答