Как вставить в таблицу, в которой также присутствует триггер?

#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), оператор будет синтаксически корректным, но может быть не тем, что вы хотите. Я сомневаюсь, что ваш триггер правильный, но это не непосредственная причина ошибки.