Хранимая функция, отправляющая сообщение по электронной почте с целью напоминания

Недавно начал работать с базами данных, наткнулся на такое задание, написать хранимую процедуру, которая будет отправлять сообщения по электронной почте с целью напоминания возврата книги

Такие вот таблицы есть. Book с book_details связана по ISNB. User_book связана с book_details по ISBN и item_num, так же по ID с юзером

CREATE TABLE IF NOT EXISTS public."Book"
(
    "ISBN" CHARACTER VARYING(120) COLLATE pg_catalog."default" NOT NULL,
    name CHARACTER VARYING(120) COLLATE pg_catalog."default" NOT NULL,
    autor CHARACTER VARYING(120) COLLATE pg_catalog."default" NOT NULL,
    publisher CHARACTER VARYING(120) COLLATE pg_catalog."default" NOT NULL,
    YEAR INTEGER NOT NULL,
    CONSTRAINT "Book_pkey" PRIMARY KEY ("ISBN")
)
 
TABLESPACE pg_default;
 
ALTER TABLE IF EXISTS public."Book"
    OWNER TO postgres;
CREATE TABLE IF NOT EXISTS public."Book_detalis"
(
    "ISBN" CHARACTER VARYING(120) COLLATE pg_catalog."default" NOT NULL,
    item_num INTEGER NOT NULL,
    curstatus CHARACTER VARYING COLLATE pg_catalog."default",
    CONSTRAINT "Book_detalis_pkey" PRIMARY KEY ("ISBN", item_num),
    CONSTRAINT book_fkey FOREIGN KEY ("ISBN")
        REFERENCES public."Book" ("ISBN") MATCH SIMPLE
        ON UPDATE NO ACTION
        ON DELETE NO ACTION
        NOT VALID
)
 
TABLESPACE pg_default;
 
ALTER TABLE IF EXISTS public."Book_detalis"
    OWNER TO postgres;
CREATE TABLE IF NOT EXISTS public."User"
(
    "ID" INTEGER NOT NULL,
    name CHARACTER VARYING(50) COLLATE pg_catalog."default" NOT NULL,
    patronymic CHARACTER VARYING(50) COLLATE pg_catalog."default" NOT NULL,
    "position" CHARACTER VARYING(50) COLLATE pg_catalog."default" NOT NULL,
    email CHARACTER VARYING(120) COLLATE pg_catalog."default",
    work_email CHARACTER VARYING(120) COLLATE pg_catalog."default",
    phone CHARACTER VARYING(12) COLLATE pg_catalog."default",
    ROLE CHARACTER VARYING(50) COLLATE pg_catalog."default",
    CONSTRAINT "User_pkey" PRIMARY KEY ("ID")
)
 
TABLESPACE pg_default;
 
ALTER TABLE IF EXISTS public."User"
    OWNER TO postgres;
CREATE TABLE IF NOT EXISTS public."User_book"
(
    "ISBN" CHARACTER VARYING(120) COLLATE pg_catalog."default" NOT NULL,
    book_item_num INTEGER NOT NULL,
    user_id INTEGER,
    STATUS CHARACTER VARYING(120) COLLATE pg_catalog."default",
    return_date DATE,
    take_date DATE,
    "Id" INTEGER NOT NULL,
    CONSTRAINT "User_book_pkey" PRIMARY KEY ("ISBN", book_item_num, "Id"),
    CONSTRAINT book_detalis_fkey FOREIGN KEY ("ISBN", book_item_num)
        REFERENCES public."Book_detalis" ("ISBN", item_num) MATCH SIMPLE
        ON UPDATE NO ACTION
        ON DELETE NO ACTION
        NOT VALID,
    CONSTRAINT user_fkey FOREIGN KEY ("Id")
        REFERENCES public."User" ("ID") MATCH SIMPLE
        ON UPDATE NO ACTION
        ON DELETE NO ACTION
        NOT VALID
)
 
TABLESPACE pg_default;
 
ALTER TABLE IF EXISTS public."User_book"
    OWNER TO postgres;

Наткнулся на статью на хабре: https://habr.com/ru/post/650059/ Можно ли как-то проще сделать? Именно хранимую функцию


Ответы (0 шт):