Вставить результаты хранимой процедуры в существующую таблицу
У меня есть таблица с именем 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
1 ответ
Решение
Если есть возможность сделать 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.
ОБНОВИТЬ
Если вам нужна одна запись в таблице percentages
Вы можете сделать UPSERT. Смотрите обновленный код.