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);