Загрузка данных


USE db_4991_19_pr;

DELIMITER \[ -- ====================== 1.1.3 Процедуры для работы со STUDENTS ======================

-- 1. Добавление студента
DROP PROCEDURE IF EXISTS Student_Add \]
CREATE PROCEDURE Student_Add(
    IN p_lastName VARCHAR(50),
    IN p_name VARCHAR(50),
    IN p_yearBirth YEAR,
    IN p_gender CHAR(1),
    IN p_team INT
)
BEGIN
    INSERT INTO STUDENTS (lastName, name, yearBirth, gender, team)
    VALUES (p_lastName, p_name, p_yearBirth, p_gender, p_team);
    
    SELECT LAST_INSERT_ID() AS new_id;
END \[ -- 2. Редактирование студента
DROP PROCEDURE IF EXISTS Student_Update \]
CREATE PROCEDURE Student_Update(
    IN p_id INT,
    IN p_lastName VARCHAR(50),
    IN p_name VARCHAR(50),
    IN p_yearBirth YEAR,
    IN p_gender CHAR(1),
    IN p_team INT
)
BEGIN
    UPDATE STUDENTS 
    SET lastName = p_lastName,
        name = p_name,
        yearBirth = p_yearBirth,
        gender = p_gender,
        team = p_team
    WHERE id = p_id;
    
    SELECT ROW_COUNT() AS updated_rows;
END \[ -- 3. Удаление студента с проверкой
DROP PROCEDURE IF EXISTS Student_Delete \]
CREATE PROCEDURE Student_Delete(IN p_id INT, OUT result_msg VARCHAR(150))
BEGIN
    DECLARE cnt INT DEFAULT 0;
    
    SELECT COUNT(*) INTO cnt 
    FROM WORK w
    JOIN TEAM t ON w.teamid = t.id
    WHERE t.lider = p_id 
       OR t.id IN (SELECT team FROM STUDENTS WHERE id = p_id);
    
    IF cnt > 0 THEN
        SET result_msg = 'Ошибка! Невозможно удалить — есть связанные записи!';
    ELSE
        DELETE FROM STUDENTS WHERE id = p_id;
        SET result_msg = 'Студент успешно удалён';
    END IF;
END \[ DELIMITER ;