#oracle #triggers #procedure
#Oracle #триггеры #процедура
Вопрос:
Последние несколько дней я работаю над своим проектом SQL «Система управления выставлением счетов супермаркета», здесь я сталкиваюсь с множеством препятствий при создании этого проекта. Поскольку я новичок, я не могу решить все свои проблемы, поэтому, пожалуйста, помогите мне!! Вот мои сомнения: я создал таблицу под названием «Платежи», и внутри нее я даже создал триггер и процедуру, теперь я не знаю, как вставить значения в таблицу платежей из-за триггера и процедуры. И я хочу такую процедуру, которая может добавить общую стоимость продукта для одного человека, и она будет сохранена в итоговую сумму, я не уверен, что мой код процедуры правильный или нет, но он был создан успешно. Итак, если есть какие-либо проблемы с моим кодом процедуры, пожалуйста, дайте мне знать, и, пожалуйста, также скажите мне, как я могу вставить его, приведя пример
Таблица Paymnets :
create table Paymnets
(
PayId int primary key, PayDate date,
ProdTotal int,
FinalTotal int,
PayOrdId int references orders,
PayProdId int references Products,
PayCustId int references Customers
);
Таблица продуктов:
create table Products (
ProdId number primary key,
ProdNum number not null unique,
ProdName varchar2(15),
ProdPrice int,
ProdQuantity int,
ProdCustId int references Customers,
ProdOrdId int references Orders,
ProdStoreId int references Stores
);
Процедура :
create procedure FINAL_TOTAL(C IN NUMBER, T OUT NUMBER) IS BEGIN
UPDATE
Payments
SET
FinalTotal = FinalTotal ProdTotal
WHERE
PayCustId = C;
Commit;
SELECT
FinalTotal into T
FROM
Payments
WHERE
PayCustId = C;
END;
/
Триггер:
create trigger PROD_TOTAL
AFTER INSERT ON Products
BEGIN
UPDATE Paymnets
SET ProdTotal = (SELECT Products.ProdPrice * Products.ProdQuantity FROM Products);
END;
/
инструкция insert:
insert into Payments values(1,'2020-10-07',1,1,1);
Ну, после вставки такого количества значений я знал, что получу ошибку, и поэтому я получил:
ошибка: недостаточно значений
Здесь я хочу знать, как я могу вставить значения в таблицу платежей, и если мой код процедуры неверен, то что я должен написать? Поэтому, пожалуйста, помогите мне в решении этих проблем!!
Комментарии:
1. Этот оператор update не коррелируется
Payments
с подзапросомwhere Products.ProdId = Payments.PayProdId)
, но индексированное представление может быть лучше для этого.2. @Charlieface Извините, но я не понял вас!
3. Вы разместили ВСТАВКУ в платежах, но триггер связан с ВСТАВКОЙ в таблице продуктов. Другое: вы будете обновлять все платежи с одинаковым значением, верно?
4. Вы отметили свой вопрос «sql-server» (Microsoft SQL Server), но синтаксис выглядит как другая СУБД. Добавьте правильный тег и удалите «sql-server».
5. Непосредственная проблема заключается в том, что в вашей
payments
таблице 7 столбцов, но в вашемinsert
заявлении указано только 5 значений. Если вы явно указали столбцы, в которые хотите вставить (что всегда следует делать для любого оператора insert), оператор будет синтаксически корректным, но может быть не тем, что вы хотите. Я сомневаюсь, что ваш триггер правильный, но это не непосредственная причина ошибки.