JWorld@TW the best professional Java site in Taiwan
      註冊 | 登入 | 全文檢索 | 排行榜  

» JWorld@TW » JDBC/SQL討論區 » Oracle  

按列印兼容模式列印這個話題 列印話題    把這個話題寄給朋友 寄給朋友    訂閱主題
reply to topicthreaded modego to previous topicgo to next topic
本主題所含的標籤
無標籤
作者 oracle 欄位內資料互換問題
mavericklu





發文: 8
積分: 0
於 2016-10-12 03:08 user profilesend a private message to userreply to postreply to postsearch all posts byselect and copy to clipboard. 
ie only, sorry for netscape users:-)add this post to my favorite list
目前遇到一個問題,同一個資料表欄位內有a,b兩種資料。

如何在一個交易內讓a update 成b,此時資料鎖定,再下b update成 a,兩者不會互相影響。

目前只有想到開兩個connection去做交易鎖定,但因為還有其他多筆資料要修改,不可能一直開connection去做鎖定處理。

所以想請問oracle有可以處理這種狀況的資料鎖定語法可以用嗎?


reply to postreply to post
虛心,多看,多聽,多學
作者 Re:oracle 欄位內資料互換問題 [Re:mavericklu]
jimmy14

Give me J-Power !



發文: 787
積分: 3
於 2016-10-12 03:32 user profilesend a private message to userreply to postreply to postsearch all posts byselect and copy to clipboard. 
ie only, sorry for netscape users:-)add this post to my favorite list
試試看這個
1
2
3
4
5
6
7
8
update mytable
set mycol=case
when mycol='a' then 'b'
else 'a'
end
where mycol='a' or mycol='b'
;
commit;


reply to postreply to post
作者 Re:oracle 欄位內資料互換問題 [Re:jimmy14]
mavericklu





發文: 8
積分: 0
於 2016-10-12 06:05 user profilesend a private message to userreply to postreply to postsearch all posts byselect and copy to clipboard. 
ie only, sorry for netscape users:-)add this post to my favorite list
感謝您的回覆。

只是因為我有許多資料要變更,如果要用您的語法,變成程式我要先抓出有相關的值才可以。

是否有可以有鎖定更新中的資料的指令呢?

ex:

開一個connection

這裡下鎖定指令;

UPDATE user.mytable SET mycol='a' WHERE mycol='b';

或這裡下鎖定指令;

UPDATE user.mytable SET mycol='b' WHERE mycol='a';

UPDATE user.mytable SET mycol='c' WHERE mycol='cc';

UPDATE user.mytable SET mycol='d' WHERE mycol='dd';
....

最後commit;

是否有可以鎖定同一個交易中的資料不被其他update語法所影響的oracle 指令呢?


reply to postreply to post
虛心,多看,多聽,多學
作者 Re:oracle 欄位內資料互換問題 [Re:mavericklu]
ynchang





發文: 151
積分: 0
於 2016-10-12 08:00 user profilesend a private message to userreply to postreply to postsearch all posts byselect and copy to clipboard. 
ie only, sorry for netscape users:-)add this post to my favorite list

只是因為我有許多資料要變更,如果要用您的語法,變成程式我要先抓出有相關的值才可以。

UPDATE user.mytable SET mycol='xxx' WHERE mycol='xxx';
.
.
.
最後commit;


每執行一個SQL的命令, 就會完成該次的任務.
剩下的事情, 應該由程式來處理才對.

從你給的例子來看, 既然程式都已經知道什麼時間該Commit了.
就表示那時已經知道所有需要被轉換過的值, 以及要被轉換成什麼值了.
然後再搭配jimmy14回覆的語法, 應該就可以解決你現在的問題才對

流程大概會是這樣:
1. 使用者輸入要被替換的內容, 以及替換後的內容
2. 程式記錄使用者輸入的條件
3. 使用者決定依照輸入的條件更新資料
4. 程式組成更新語法, 並且執行

步驟1和2可以反覆執行....


reply to postreply to post
作者 Re:oracle 欄位內資料互換問題 [Re:ynchang]
mavericklu





發文: 8
積分: 0
於 2016-10-13 08:59 user profilesend a private message to userreply to postreply to postsearch all posts byselect and copy to clipboard. 
ie only, sorry for netscape users:-)add this post to my favorite list
謝謝兩位前輩回覆,語法測試可以一次就互換資料,處理時要特別挑出這種資料做處理。

感謝J大提供語法~y大提供想法~


reply to postreply to post
虛心,多看,多聽,多學
» JWorld@TW »  JDBC/SQL討論區 » Oracle

reply to topicthreaded modego to previous topicgo to next topic
  已讀文章
  新的文章
  被刪除的文章
Jump to the top of page

JWorld@TW 本站商標資訊

Powered by Powerful JuteForum® Version Jute 1.5.8