2014-02-11 29 views
-1

我必須根據某些條件更新oracle中的一個表。使用條件更新oracle中的查詢

它包含三個字段。名稱,Old_Address和New_Address

當New_Address更改時,我必須將上一個New_Address存儲到Old_Address中。 我的表中包含一定的價值是這樣的:

名稱:Sesuraj,OLD_ADDRESS:晨奈,NEW_ADDRESS:德里

現在我想,如果新的地址改變

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

NEW_ADDRESS存入OLD_ADDRESS現在導致是: 名稱:溼婆,OLD_ADDRESS:德里,NEW_ADDRESS:孟買

現在我不得不停止更新,如果NEW_ADDRESS不改變

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

我想出來把這樣的:

名稱:大師,OLD_ADDRESS:德里,NEW_ADDRESS:孟買

+1

使用'BEFORE UPDATE'觸發試過? – Phil

+0

觸發器正在工作。但是期望的輸出沒有出現。如果new_address = new_address表示它也存儲在old_address中。 – Sesuraj

+0

使用'If'語句來測試'如果new_address = new_address'則更新否則不要 –

回答

1

我認爲你需要的輸出u必須再次更新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(編輯,被打破)