получить вывод массива хранимой процедуры в MySQL - PullRequest
0 голосов
/ 06 ноября 2018

Я создал хранимую процедуру для подсчета количества работ для каждого техника, используя ID этого техника и предполагаемый год в качестве входных данных для этой хранимой процедуры, но я придерживался. , , Как я могу получить массив выходных данных в этой процедуре, чтобы я мог использовать его позже в моем коде в 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

Ответы [ 2 ]

0 голосов
/ 06 ноября 2018

Если вы выполняете несколько запросов, вам нужно создать временную таблицу для хранения промежуточных результатов, а затем просто сделать 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
0 голосов
/ 06 ноября 2018

Я использовал временную таблицу для хранения данных в ней, затем опубликовал ее с помощью оператора 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  
...