2011-03-10 30 views
1

我知道Oracle有TRIM函數,我想用它來修剪我的表中某個字段的空白。表中的數據oracle

這樣:

update THIRD_PARTY_ADRS_INFO_TEMP 
set HOUSE_NO = TRIM(HOUSE_NO); 

當我嘗試在SQL Developer中運行它只是掛起。

我自己也嘗試TRIM(' ' from HOUSE_NO)REPLACE(HOUSE_NO,' ','')都具有相同的效果

這似乎應該是很簡單...

想法?

回答

3

如果它「掛起」,則表明您的會話被另一個會話阻止。您正試圖更新表格中的每一行;如果另一個會話在同一個表中鎖定了一行,但尚未提交,您的會話將不得不等待。

+0

我會猜測這是問題所在。我重新啓動SQL開發人員,它的工作... – kralco626 2011-03-10 14:17:05

+0

,即使修剪並沒有實際刪除所有的空白...我必須有一些標籤在那裏或什麼... – kralco626 2011-03-10 14:21:06

+1

我會添加一個「WHERE HOUSE_NO!= TRIM(HOUSE_NO)「子句來防止在不必要的更新上浪費時間 – 2011-03-10 22:41:57

1

表中有多少行?你可以試着做一個選擇而不是更新(例如rownum < 10),只是爲了滿足自己的需求。

+0

如果您的表很大,請嘗試在HOUSE_NO列上創建一個索引。 – 2011-03-10 14:11:36

+0

表中沒有超過一百行左右的行... – kralco626 2011-03-10 14:16:00

+0

儘管他每行都在更新,所以索引可能沒有幫助? – 2011-03-10 14:16:25

2

很高興你解決了行鎖。至於刪除各種空白空間,如果在最近的Oracle版本上,還可以查看REGEXP_REPLACE。這比修剪慢一點,但如果你有多個可能的非打印字符來處理它可能值得一看。

例如

select regexp_replace(x,'[[:space:]|[:blank:]|[:cntrl:]]*$','') 
    from (select 'ad f cde '||chr(10)||chr(13)||chr(8)||' ' as x from dual); 
+0

+1,因爲這是涉及「oracle修剪」的唯一答案。我到了這個頁面,因爲我搜索了「oracle trim」。接受的答案幫助了OP,但可能無法幫助找到此頁面的其他人。這個答案對我來說最有幫助。 – 2012-01-20 18:04:38