Хранимая функция, отправляющая сообщение по электронной почте с целью напоминания
Недавно начал работать с базами данных, наткнулся на такое задание, написать хранимую процедуру, которая будет отправлять сообщения по электронной почте с целью напоминания возврата книги
Такие вот таблицы есть. 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/ Можно ли как-то проще сделать? Именно хранимую функцию