CREATE TABLE Кассиры(
id SERIAL PRIMARY KEY,
ФИО_кассира VARCHAR(50) NOT NULL,
Возраст INT NOT NULL,
Должность varchar(50) NOT NULL
);
CREATE TABLE Чеки(
id SERIAL PRIMARY KEY,
kas_id int,
Номер_чека SERIAL,
Дата_создания TIMESTAMP(0) DEFAULT NOW(),
FOREIGN KEY (kas_id) REFERENCES Кассиры(id)
);
CREATE TABLE Товары(
id SERIAL PRIMARY KEY,
Название VARCHAR(50) NOT NULL,
Цена INT NOT NULL,
Штук_на_складе INT NOT NULL
);
CREATE TABLE Купленные_товары(
id SERIAL PRIMARY KEY,
check_id INT,
product_id INT,
Количество INT NOT NULL,
Цена_товаров INT DEFAULT 0,
FOREIGN KEY (check_id) REFERENCES Чеки(id),
FOREIGN KEY (product_id) REFERENCES Товары(id)
);
INSERT INTO Кассиры(ФИО_кассира, Возраст, Должность)
VALUES
('Романов', 44, 'Кассир');
INSERT INTO Чеки(kas_id) SELECT id FROM Кассиры ORDER BY RANDOM() LIMIT 1;
INSERT INTO Товары(Название, Цена, Штук_на_складе)
VALUES
('Кефир', 55, 10);
CREATE PROCEDURE Insert_Купленные_товары(_Название VARCHAR(50), _Количество INT)
LANGUAGE plpgsql
AS $$
DECLARE _product_id INT;
BEGIN
SELECT id INTO _product_id FROM Товары WHERE Название= _Название and Штук_на_складе>=_Количество;
IF (_product_id IS NULL) THEN
RAISE EXCEPTION 'Товар не существует';
END IF;
INSERT INTO Купленные_товары(product_id) VALUES (_product_id);
Insert INTO Купленные_товары(check_id) SELECT id FROM Чеки order by id DESC LIMIT 1;
UPDATE Купленные_товары
SET Цена_товаров = Количество * (SELECT Цена FROM Товары WHERE id = Купленные_товары.product_id);
END;
$$;
call CREATE PROCEDURE Insert_Купленные_товары(Кефирб, 4);