powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / Oracle APEX [игнор отключен] [закрыт для гостей] / как сделать так, чтобы при добавлении значений в одну таблицу, они вычитались из другой?
13 сообщений из 13, страница 1 из 1
как сделать так, чтобы при добавлении значений в одну таблицу, они вычитались из другой?
    #37283890
blondin4ik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
привет!
как сделать так чтобы при добавление нового заказа в табл orders количество заказанных единиц quantity вычеталось из запасов, которые хранятся в другой таблице?
спасибо.
...
Рейтинг: 0 / 0
как сделать так, чтобы при добавлении значений в одну таблицу, они вычитались из другой?
    #37283900
Фотография suPPLer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
blondin4ik,

ну а пример данных, пример Ваших попыток решения в виде кода? И главное, к APEX это как относится?
...
Рейтинг: 0 / 0
как сделать так, чтобы при добавлении значений в одну таблицу, они вычитались из другой?
    #37283938
blondin4ik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
suPPLer,

ну кода то особо и нет, так как я пока не знаю с какой стороны подойти.
суть задачи: создал форму для добавления заказов на основе таблицы orders, где находиться поле количества заказанных единиц QUANTITY. Надо, чтобы количество заказанного синхронизировалось с запасами хранящимися в табл items в атрибуте STOCK
...
Рейтинг: 0 / 0
как сделать так, чтобы при добавлении значений в одну таблицу, они вычитались из другой?
    #37283955
Фотография suPPLer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
blondin4ik,

поверьте, Ваш вопрос - это не вопрос касательно APEX. Это вопрос об SQL (как обновить таблицу остатков), о PL/SQL (как написать процедуру, которая будет обновлять таблицу остатков), о проектировании БД.

Синхронизировать остаток товара с заказанным - это просто. Например, так

Код: plaintext
1.
2.
3.
4.
merge into stock tgt
using (select ... from orders where order_id = :p_new_order_id) src
   on (...)
 when matched then
   update set tgt.qty = src.qty;

Лучше обдумайте, может ли у Вас быть отрицательный остаток, что делать, если при создании заказа не хватает товара, стоит ли выводить в форме доступное для заказа количество товара. И хранение строк заказа в таблице заказов - это не третья нормальная форма. Так что нормализуйте модель данных.
...
Рейтинг: 0 / 0
как сделать так, чтобы при добавлении значений в одну таблицу, они вычитались из другой?
    #37284142
blondin4ik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
suPPLer,

ясно. просто пишу я в нем. по этому и решил что задавать вопрос надо в этой ветке.

что касательно отрицательных остатков и вывод доступного это все потом. мне бы для начала по простому решить, чтобы при добавлении в одну таблицу каких-либо значений они вычитались из другой. по поводу третьей нормальной формы - спасибо за замечание, учту.
...
Рейтинг: 0 / 0
как сделать так, чтобы при добавлении значений в одну таблицу, они вычитались из другой?
    #37284147
blondin4ik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
suPPLer,

но если вы подскажите как работать с отрицательным остатком и что делать если при создании заказа не хватает товара - буду только рад!
...
Рейтинг: 0 / 0
как сделать так, чтобы при добавлении значений в одну таблицу, они вычитались из другой?
    #37284472
blondin4ik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
короче написал вот такой триггер. вроде заработало. может кому пригодиться
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
create or replace TRIGGER  "UPDATE_STOCK"
after insert or update or delete on order_items
begin

-- Update the Stock when any order item is changed

update product_info set stock = (stock -
  (select quantity from order_items
    where order_items.product_id = product_info.product_id));
end;
...
Рейтинг: 0 / 0
как сделать так, чтобы при добавлении значений в одну таблицу, они вычитались из другой?
    #37284546
beginner_dba
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
blondin4ikкороче написал вот такой триггер. вроде заработало. может кому пригодиться
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
create or replace TRIGGER  "UPDATE_STOCK"
after insert or update or delete on order_items
begin

-- Update the Stock when any order item is changed

update product_info set stock = (stock -
  (select quantity from order_items
    where order_items.product_id = product_info.product_id));
end;

А если будет аннулирование заказа?
...
Рейтинг: 0 / 0
как сделать так, чтобы при добавлении значений в одну таблицу, они вычитались из другой?
    #37284547
Фотография suPPLer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
blondin4ikкороче написал вот такой триггер. вроде заработало. может кому пригодиться
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
create or replace TRIGGER  "UPDATE_STOCK"
after insert or update or delete on order_items
begin

-- Update the Stock when any order item is changed

update product_info set stock = (stock -
  (select quantity from order_items
    where order_items.product_id = product_info.product_id));
end;


А теперь попробуйте подумать, что произойдёт, если кто-то будет менять существующий заказ.
...
Рейтинг: 0 / 0
как сделать так, чтобы при добавлении значений в одну таблицу, они вычитались из другой?
    #37284604
Фотография suPPLer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
suPPLerА теперь попробуйте подумать, что произойдёт, если кто-то будет менять существующий заказ.

PS: Чуть не забыл. Обновлять всю таблицу остатков подзапросами по всей таблице заказов - это, конечно, решит задачу. Но очень не эффективно.
...
Рейтинг: 0 / 0
как сделать так, чтобы при добавлении значений в одну таблицу, они вычитались из другой?
    #37291263
blondin4ik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
suPPLer,

авторА теперь попробуйте подумать, что произойдёт, если кто-то будет менять существующий заказ.
да согласен. у мне нет ответа на этот вопрос.

авторPS: Чуть не забыл. Обновлять всю таблицу остатков подзапросами по всей таблице заказов - это, конечно, решит задачу. Но очень не эффективно.
пфф.. хз, а как эффективно?
...
Рейтинг: 0 / 0
как сделать так, чтобы при добавлении значений в одну таблицу, они вычитались из другой?
    #37291322
blondin4ik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
beginner_dba,

Код: plaintext
А если будет аннулирование заказа? 

если будет аннулирование, то товары не будут выводиться в форму заказов. там стоит условие
Код: plaintext
where stock >  0 
...
Рейтинг: 0 / 0
как сделать так, чтобы при добавлении значений в одну таблицу, они вычитались из другой?
    #37291425
Фотография suPPLer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
blondin4iksuPPLer,

авторА теперь попробуйте подумать, что произойдёт, если кто-то будет менять существующий заказ.
да согласен. у мне нет ответа на этот вопрос.

Давайте порассуждаем. Ваш триггер выполняется при вставке, обновлении и удалении. Кто-то вставил заказ с покупкой пяти авторучек. Остаток авторучек уменьшился на пять. Вдруг этот заказ решили уменьшить и изменили пять авторучек на три. Что сделает Ваш триггер?

blondin4iksuPPLerPS: Чуть не забыл. Обновлять всю таблицу остатков подзапросами по всей таблице заказов - это, конечно, решит задачу. Но очень не эффективно.
пфф.. хз, а как эффективно?

Эффективно обновлять остатки по тем товарам, заказ по которым менялся.

RTFM Oracle® Database Concepts: 22 Triggers .
...
Рейтинг: 0 / 0
13 сообщений из 13, страница 1 из 1
Форумы / Oracle APEX [игнор отключен] [закрыт для гостей] / как сделать так, чтобы при добавлении значений в одну таблицу, они вычитались из другой?
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]