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


DELIMITER //

CREATE FUNCTION Nazv_Pr(sh INT)
RETURNS VARCHAR(100)
DETERMINISTIC
BEGIN
    DECLARE res VARCHAR(100);

    SELECT project INTO res
    FROM PROJECT
    WHERE shifr = sh;

    RETURN res;
END //

DELIMITER ;

DELIMITER //

CREATE FUNCTION KolRabot(teamName VARCHAR(50))
RETURNS INT
DETERMINISTIC
BEGIN
    DECLARE res INT;

    SELECT COUNT(*) INTO res
    FROM WORK w
    JOIN TEAM t ON w.team = t.id
    WHERE t.team = teamName;

    RETURN res;
END //

DELIMITER ;

DELIMITER //

CREATE FUNCTION Pr_mes(m INT)
RETURNS INT
DETERMINISTIC
BEGIN
    DECLARE res INT;

    SELECT COUNT(*) INTO res
    FROM PROJECT
    WHERE MONTH(dateStart) = m;

    RETURN res;
END //

DELIMITER ;

DELIMITER //

CREATE FUNCTION Nazv_MaxPr(teamName VARCHAR(50))
RETURNS VARCHAR(100)
DETERMINISTIC
BEGIN
    DECLARE res VARCHAR(100);

    SELECT p.project INTO res
    FROM PROJECT p
    JOIN WORK w ON p.shifr = w.project
    JOIN TEAM t ON w.team = t.id
    WHERE t.team = teamName
    ORDER BY p.cost DESC
    LIMIT 1;

    RETURN res;
END //

DELIMITER ;

DELIMITER //

CREATE FUNCTION Dni_pr(sh INT)
RETURNS INT
DETERMINISTIC
BEGIN
    DECLARE d DATE;

    SELECT dateStart INTO d
    FROM PROJECT
    WHERE shifr = sh;

    RETURN Kol_Dney(d, CURDATE());
END //

DELIMITER ;

DELIMITER //

CREATE PROCEDURE PrF()
BEGIN
    SHOW FUNCTION STATUS WHERE Db = DATABASE();
END //

DELIMITER ;

CALL PrF();

DELIMITER //

CREATE FUNCTION ProjectsRange(a INT, b INT)
RETURNS TEXT
DETERMINISTIC
BEGIN
    DECLARE done INT DEFAULT 0;
    DECLARE res TEXT DEFAULT '';
    DECLARE pr INT;

    DECLARE cur CURSOR FOR
        SELECT shifr FROM PROJECT
        WHERE cost BETWEEN a AND b;

    DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = 1;

    OPEN cur;

    read_loop: LOOP
        FETCH cur INTO pr;
        IF done THEN
            LEAVE read_loop;
        END IF;
        SET res = CONCAT(res, pr, ', ');
    END LOOP;

    CLOSE cur;

    RETURN res;
END //

DELIMITER ;