2015-10-27 5 views
0

У меня есть две таблицы: значение поляOracle обновление двух таблиц

Item: Order_no, Item, Line_No 
Fulfill: Order_no, Location, LINE NO 

LINE_NO является одинаковой в обеих таблицах для всех заказов.

Я хочу обновить значение LINE_NO, чтобы начать с 1 и перейти к количеству позиций в обеих таблицах.

Как это сделать?

+0

Я не думаю, что есть способ сделайте это в SQL-ребята, пожалуйста, сообщите, если я что-то упустил :) Я бы сделал это в процедуре (сохраненной, если это часть какой-то обработки) или в скрипте (если только обновление с одним таймером), и рассматривайте его как один начало транзакции с началом, а затем обновить первую таблицу, обновить вторую таблицу. после этого, если есть какая-то ошибка в любом случае, просто откат всей транзакции или фиксация, если все в порядке. Я могу привести вам быстрый пример, если вы хотите посмотреть, как это сделать ... –

+0

Пожалуйста, не так ли? :) –

+1

Это выглядит странно. Начиная с имен таблиц. У предмета есть 'order_no'? Итак, каждый элемент можно заказать только один раз? Разве он не должен быть таблицей 'order_position', чем таблица' item'? Затем, когда вы уже сохранили позиции заказов, почему бы вам внезапно изменить строку_number? И какую сортировку вы хотите применить при предоставлении номера? Пожалуйста, покажите некоторые примеры данных и желаемый результат. –

ответ

1

Использование процедуры может быть таким. Это только скелет, но в целом, вам просто нужно положить ваши обновления внутри начать - исключение - конечный блок (как вы попробовать - поймать - наконец-то в Java):

create or replace procedure pr_procedure_name is 
    --some declarations 
    l_line_no integer; 
    l_order_no integer; 
begin 
    --some processing here 
    begin 

     update item i 
     set i.line_no = l_line_no 
     where i.order_no = l_order_no; 

     update fulfill ff 
     set ff.line_no = l_line_no 
     where ff.order_no = l_order_no; 

     --commit; 
     --commit or not here - it depends on your processing 

    exception 
     when others then 
     --log something? 
     rollback; 
    end; 

    --some processing there 

end pr_procedure_name; 
+1

Я создал процедуру, подобную этой, и он выполнил эту работу! –

Смежные вопросы