Скачиваний:
0
Добавлен:
31.05.2023
Размер:
4.66 Кб
Скачать
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;