2014-02-11 2 views
-1

Мне нужно обновить одну таблицу в oracle на основе некоторого состояния.Обновить запрос в oracle с условием

Он содержит три поля. Имя, Old_Address и New_Address

Мне нужно сохранить Предыдущий новый_Address в Old_Address при изменении New_Address. Моя таблица содержит некоторое значение, как это:

Имя: Sesuraj, old_address: Ченнаи, New_Address: Дели

Теперь я хочу, чтобы хранить new_address в old_address если новый адрес изменяется

update customer set Name='Siva',old_address=new_address,new_address='Mumbai' 

Теперь результат это: Имя: Шива, old_address: Дели, new_address: Мумбаи

Теперь я должен остановить обновление, если new_address не изменилось

update customer set Name='Guru',old_address=new_address,new_address='Mumbai' 

Я хочу, чтобы из положить так:

Имя: Гуру, old_address: Дели, new_address: Мумбаи

+1

попытался с помощью 'ПЕРЕД триггер UPDATE'? – Phil

+0

Триггер работает. Но желаемого результата не было. Если new_address = new_address означает, что он также хранится в old_address .. – Sesuraj

+0

Использовать оператор 'If' для проверки' If new_address = new_address', а затем обновить else dont –

ответ

1

Я думаю, что для нужного выхода у вас обновить old_address снова, чтобы получить старый снова на выходе

update customer set Name='Guru',old_address='Delhi',new_address='Mumbai' 
0

попробовать с тем, где состояние, как показано ниже:

update customer set Name='Guru',old_address='Delhi',new_address='Mumbai' 
    where new_address<>'Mumbai' 
1

Попробуйте это:

update customer set Name='Guru',old_add=(SELECT new_add from customer where cust_id=1),new_add='Jaipur' where cust_id=1 AND new_add<>'Jaipur' 

Здесь «Джайпур» ваш новый адрес (вход пользователя)

+0

Вы попробовали это? Это работает для меня .. !! – TechBytes

0

Вы могли бы просто использовать CASE в своем обновлении, чтобы использовать правильное значение, в зависимости, если они совпадают.

UPDATE customer SET name='Siva', 
     new_address='Mumbai', 
     old_address=CASE WHEN new_address<>'Mumbai' 
         THEN new_address 
         ELSE old_address END 
     WHERE id=1; 

Обратите внимание, что значение, которое вы хотите обновить до переходит в запросе 2 раза, один раз для обновления new_value и один раз сравнить с и обновить old_value;

An SQLfiddle to test with (Под редакцией, была сломана)

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