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


DROP PROCEDURE IF EXISTS Count_rabota $$
CREATE PROCEDURE Count_rabota(OUT total INT)
BEGIN
    SELECT COUNT(*) INTO total FROM WORK;
END $$

DELIMITER ;

-- Вызов процедуры
CALL Count_rabota(@a);

-- Просмотр результата
SELECT @a AS Total_Work_Records;




DELIMITER $$

DROP PROCEDURE IF EXISTS PR_nm $$
CREATE PROCEDURE PR_nm(IN shift VARCHAR(20), OUT nm VARCHAR(100))
BEGIN
    SELECT topic INTO nm 
    FROM PROJECT 
    WHERE shifr = shift;
END $$
DELIMITER ;

SET @shifr := 'a123'; -- Предположим, такой шифр есть в БД
CALL PR_nm(@shifr, @nm);
SELECT @shifr AS Shifr, @nm AS Project_Name;




DELIMITER $$

DROP PROCEDURE IF EXISTS GetProjectNameByWorkId $$
CREATE PROCEDURE GetProjectNameByWorkId(IN work_id INT, OUT proj_name VARCHAR(100))
BEGIN
    DECLARE v_shifr VARCHAR(20);
    
    -- 1. Получаем шифр проекта из таблицы WORK
    SELECT project_shifr INTO v_shifr 
    FROM WORK 
    WHERE id = work_id;
    
    -- 2. Вызываем ранее созданную процедуру PR_nm
    -- Важно: внутри процедуры нельзя использовать CALL для другой процедуры, 
    -- если она возвращает OUT параметры в локальные переменные текущей процедуры напрямую таким образом в некоторых версиях MySQL, 
    -- но стандартный способ - дублировать логику или использовать функцию. 
    -- Однако, по заданию требуется использовать PR_nm.
    
    CALL PR_nm(v_shifr, proj_name);
END $$

DELIMITER ;

CALL GetProjectNameByWorkId(1, @res_name);
SELECT @res_name;


DELIMITER $$

DROP PROCEDURE IF EXISTS print_date_n_times $$
CREATE PROCEDURE print_date_n_times(IN n INT)
BEGIN
    DECLARE i INT DEFAULT 0;
    
    WHILE i < n DO
        SELECT NOW() AS Current_Date_Time;
        SET i = i + 1;
    END WHILE;
END $$

DELIMITER ;

-- Пример вызова:
CALL print_date_n_times(3);