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

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

ну кода то особо и нет, так как я пока не знаю с какой стороны подойти.
суть задачи: создал форму для добавления заказов на основе таблицы orders, где находиться поле количества заказанных единиц QUANTITY. Надо, чтобы количество заказанного синхронизировалось с запасами хранящимися в табл items в атрибуте STOCK
...
Рейтинг: 0 / 0
28.05.2011, 23:16
    #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
29.05.2011, 11:57
    #37284142
blondin4ik
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
как сделать так, чтобы при добавлении значений в одну таблицу, они вычитались из другой?
suPPLer,

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

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

но если вы подскажите как работать с отрицательным остатком и что делать если при создании заказа не хватает товара - буду только рад!
...
Рейтинг: 0 / 0
29.05.2011, 20:54
    #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
29.05.2011, 22:35
    #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
29.05.2011, 22:35
    #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
29.05.2011, 23:34
    #37284604
suPPLer
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
как сделать так, чтобы при добавлении значений в одну таблицу, они вычитались из другой?
suPPLerА теперь попробуйте подумать, что произойдёт, если кто-то будет менять существующий заказ.

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

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

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

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

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

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

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

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

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

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


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