Вставьте значения в mysql - PullRequest
0 голосов
/ 03 апреля 2020

Я работаю над проектом посещаемости, и эта таблица содержит статус сотрудника за каждый месяц (Permission, Missed, Late et c.). По умолчанию, это должно быть «еще предстоит принять участие». Я загружаю записи в базу данных за весь год. Вот мой код:

use attendance;
drop procedure setDefault;
DELIMITER $$
create procedure setDefault()
    BEGIN 
        DECLARE theDate date;
        set @theDate = '2020-01-25';

        while  theDate < '2021-01-24'   DO
                INSERT INTO Attendance.empStatus VALUES('4' , theDate , 'YET TO ATTEND');
                set @theDate = @theDate+1;
        end while;
    end $$
 DELIMITER      


call setDefault();        

Ps. «4» - идентификатор сотрудника.

Проблема в том, что это не выполняется. Строка 'CREATE PROCEDURE ...' выполняется, после чего она переходит к строке вызова, но я не знаю почему.

1 Ответ

1 голос
/ 03 апреля 2020

Требуются исправления для арифметики даты, условия остановки l oop и пользовательских переменных.

Это должно работать:

delimiter $$
create procedure setdefault()
    begin 
        set @thedate := '2020-01-25';
        while @thedate < '2021-01-24'   
        do
            insert into attendance.empStatus values(4 , @thedate , 'yet to attend');
            set @thedate := @thedate + interval 1 day;
        end while;
    end $$  
 delimiter ;

Здесь - небольшая демонстрация.

Обратите внимание, что если вы используете MySQL 8.0, вы также можете сделать это с помощью рекурсивного запроса:

insert into empStatus
with recursive cte as (
    select '2020-01-25' dt
    union all select dt + interval 1 day from cte where dt + interval 1 day < '2021-01-24'
)
select 4, dt, 'yet to attend' from cte;
...