Скачиваний:
7
Добавлен:
31.05.2023
Размер:
5 Кб
Скачать
CREATE OR REPLACE FUNCTION insert_enum(enum_name VARCHAR(50), enum_short_name VARCHAR(10))
/*функция: Функция добавления нового списка перечислений
вход:enum_name - название нового списка
выход: Сообщение о результате операции
эффекты:*/

    returns VARCHAR(30)
AS
$$
BEGIN
    IF enum_name in (SELECT NAME FROM ENUM) then
        RETURN 'This enum already exists!';
    end if;

    INSERT INTO ENUM(NAME, SHORT_NAME) VALUES (enum_name, enum_short_name);
    RETURN 'Done!';
END
$$
    LANGUAGE plpgsql;


CREATE OR REPLACE FUNCTION delete_enum(enum_name VARCHAR(50))
/*функция: Функция удаления списка перечислений
вход:enum_name - название списка перечислений
выход: Сообщение о результате операции
эффекты:*/

    returns VARCHAR(30)
AS
$$
BEGIN
    IF enum_name not in (SELECT NAME FROM ENUM) then
        RETURN 'This enum does not exist!';
    end if;

    DELETE
    FROM ENUM
    WHERE NAME = enum_name;
    RETURN 'Done!';
END
$$
    LANGUAGE plpgsql;


CREATE OR REPLACE FUNCTION rename_enum(new_enum_name VARCHAR(50), old_enum_name VARCHAR(50))
/*функция: Функция изменения имени списка перечислений
вход:enum_name - название списка перечислений
выход: Сообщение о результате операции
эффекты:*/

    returns VARCHAR(30)
AS
$$
BEGIN
    IF old_enum_name not in (SELECT NAME FROM ENUM) then
        RETURN 'This enum does not exist!';
    end if;

    IF new_enum_name in (SELECT NAME FROM ENUM) then
        RETURN 'This name is taken!';
    end if;

    UPDATE enum
    SET NAME = new_enum_name
    WHERE NAME = old_enum_name;
    RETURN 'Done!';
END
$$
    LANGUAGE plpgsql;

CREATE OR REPLACE FUNCTION get_enum_id(enum_name VARCHAR(50))
/*функция: Формирует возвращает id перечисления из таблицы ENUM
вход:enum_name - ид. продукта
выход: значение id_enum
эффекты: */

    returns INTEGER
AS
$$
BEGIN
    return (
        select id_enum from enum
        WHERE ENUM.NAME = enum_name
    );
END
$$
    LANGUAGE plpgsql;


CREATE OR REPLACE FUNCTION get_enum_min_value(enum_name VARCHAR(50))
/*функция: Возвращает минимальное value из таблицы ENUM_VALUE для заданнаого перечисления
вход: enum_name - название перечисления
выход: минимальное значение value
эффекты: */
    returns INTEGER
as
$$
DECLARE
    ENUM_ID INTEGER;
    RESULT  INTEGER;
begin
    SELECT * FROM get_enum_id(enum_name) INTO ENUM_ID;

    SELECT MIN(enum_value.value)
    FROM enum_value
    WHERE enum_value.id_enum = 1
    INTO RESULT;

    IF RESULT IS NULL THEN
        RETURN 0;
    ELSE
        RETURN RESULT;
    END IF;
end;
$$
    LANGUAGE plpgsql;


CREATE OR REPLACE FUNCTION get_enum_numbers(enum_name VARCHAR(50))
    returns TABLE(VALUE INTEGER)
/*функция: Возвращает список всех значений value из таблицы ENUM_VALUE
для заданнаого перечисления.
вход: enum_name - название перечисления
выход: столбец value
эффекты: */
as
$$
declare
    enum_id INTEGER;
begin
    SELECT * FROM get_enum_id(enum_name) INTO enum_id;
    RETURN QUERY
        SELECT ENUM_VALUE.VALUE
        FROM ENUM_VALUE
        WHERE ENUM_VALUE.id_enum = enum_id;
end;
$$
    LANGUAGE plpgsql;


CREATE OR REPLACE FUNCTION get_enum_list(enum_name VARCHAR(50))
/*функция: Возвращает все значения указанного перечисления.
вход: enun_name - название перечисления
выход: список значений
эффекты: */
    RETURNS TABLE
            (
                ID_VALUE   INTEGER,
                ID_ENUM    INTEGER,
                VALUE      INTEGER,
                NAME       VARCHAR(50),
                SHORT_NAME VARCHAR(10)
            )
AS
$$
DECLARE
    ENUM_ID INTEGER;
BEGIN
    SELECT * FROM get_enum_id(enum_name) INTO ENUM_ID;
    RETURN QUERY
        SELECT *
        FROM enum_value
        WHERE enum_value.id_enum = ENUM_ID
        ORDER BY VALUE;
end;
$$
    LANGUAGE plpgsql;
Соседние файлы в папке ЗАДАНИЕ 1.3. Приемы моделирования Справочников