получить вывод массива хранимой процедуры в MySQL

Я создал хранимую процедуру для подсчета количества работ для каждого техника, используя идентификатор этого техника и предполагаемый год в качестве входных данных для этой хранимой процедуры, но я придерживался. , ,
Как я могу получить массив вывода в этой процедуре, чтобы Я могу использовать это позже в моем коде в php например.
Вот моя хранимая процедура:

        DROP PROCEDURE `work_count`;
CREATE DEFINER=`root`@`localhost` PROCEDURE `work_count`(IN `id` INT, IN `yearInput` INT) NOT DETERMINISTIC NO SQL SQL SECURITY DEFINER
BEGIN
SET @x := 1;
WHILE @x<13 DO
SELECT COUNT(work.workType)
FROM work
WHERE year(workDate)=yearInput
AND work.technicianID = id
AND month(workDate)= @x;
SET @x := @x+1;
END WHILE;
END

0

Решение

Если вы выполняете несколько запросов, вам нужно создать временную таблицу для хранения промежуточных результатов, а затем просто сделать SELECT * FROM thattemporarytable одна из последних вещей, сделанных в вашей процедуре.

Что-то вроде этого…

BEGIN
DROP TEMPORARY TABLE IF EXISTS `blah` ( num INT );
CREATE TEMPORARY TABLE `blah` ( num INT );
SET @x := 1;
WHILE @x<13 DO
INSERT INTO blah (num)
SELECT COUNT(work.workType)
FROM work
WHERE year(workDate)=yearInput
AND work.technicianID = id
AND month(workDate)= @x
;
SET @x := @x+1;
END WHILE;
SELECT * FROM blah;
DROP TEMPORARY TABLE blah;
END

или, если вы можете управлять им как одним запросом, обычный выбор должен работать:

BEGIN
SELECT COUNT(work.workType)
FROM work
WHERE year(workDate)=yearInput
AND work.technicianID = id
AND month(workDate) BETWEEN 1 AND 12
;
END
1

Другие решения

Я использовал временную таблицу для хранения данных в ней, затем опубликовал ее с помощью оператора select и удалил временную таблицу в конце процедуры

BEGIN


drop TABLE if exists `myDB`.`tbl_temp`;
CREATE TABLE `myDB`.`tbl_temp` ( `countingWork` INT(11) NOT NULL ) ENGINE = InnoDB;
SET @x :=1;
WHILE @x<=12 DO
insert into `myDB`.`tbl_temp`
SELECT COUNT(work.workType)
FROM work
WHERE year(workDate)=yearInput
AND work.technicianID = id
AND month(workDate)= @x;
SET @x = @x + 1;
END WHILE;
SELECT * from `myDB`.`tbl_temp`;
drop TABLE `myDB`.`tbl_temp`;
END
0

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector