Как получить последнюю вставленную запись в таблице?
Все, кого я делаю, - проект базы данных инвентаризации для целей обучения. я новичок в разработке, пожалуйста, помогите мне
у меня есть две таблицы
StockRecords(InventoriID, ItemID, Quantity)
Purchase_Details(SupplierID, supplier_invoice, itemID, quantity, purchase_date)
Мне нужно обновлять инвентарь всякий раз, когда приобретается новый товар. Теперь мне нужно вызвать триггер dml, но я не совсем понимаю, как получить последнее вставленное значение в таблице.
Я написал процедуру, которую намереваюсь вызвать в триггере для обновления таблицы StockRecord, но мне нужно найти последнее вставленное значение в таблице Purchase_Detail, чтобы я мог проанализировать itemID и количество последней записи в моей процедуре, чтобы обновить таблицу записей.
1 ответ
Есть только один столбец, который выглядит как кандидат на это: purchase_date
, если он представляет последнюю дату, когда что-то было куплено. В этом случае вам нужно найти строку с MAX(purchase_date)
, Однако, если в этом столбце хранится несколько строк с одинаковым значением, вам не повезло.
Другими словами, вам нужно изменить текущую модель данных. Похоже, что purchase_details
таблица не имеет первичного ключа. Если это так, и если он был заполнен последовательностью, то у вас будет этот столбец (MAX(primary_key_column)
).
С другой стороны, говоря, что задействован триггер: если он срабатывает для каждой строки, то вы можете использовать: новые (или: старые, в зависимости от того, что вы делаете) идентификаторы псевдозаписи и - в основном - не заботятся о последнем строка вставлена - вы будете иметь дело с текущей.
Что-то вроде этого:
create or replace trigger trg_ai_purdet
after insert on purchase_details
for each row
begin
insert into stockrecords (inventoriid, itemid, quantity)
values (some_seq.nextval, :new.itemid, :new.quantity);
end;
Это также означает, что вам, вероятно, не нужна упомянутая вами "процедура", если единственная цель - вставить строку в STOCKRECORDS
Таблица.