2012-03-15 33 views
0

我想用遊標更新表格。但只更新了一些記錄,而其他記錄不更新。更新查詢的where子句具有包含索引的列。你能解釋爲什麼以及在這個問題上做什麼?爲什麼有些記錄正在更新,而另一些則不在oracle 11g中?

update table_name 
set table_column1='text' 
where table_column2=(select distinct table_column2 from table); 

索引在table_column2上。

+0

這是一種類型嗎?應該'table'是'table_name' – 2012-03-15 16:15:20

+0

你想在where子查詢中實現什麼?你爲什麼使用不同的?應儘可能避免不同的情況。 – tsells 2012-03-15 16:16:18

+0

@Ramesh K-如果'table'和'table_name'是不同的表,你確定'table'具有'table_name'中存在的'table_column2'的每個值嗎?任何一個表都可以在'table_column2'中有'NULL'值? – 2012-03-15 16:17:24

回答

0

讓我們採取一些有教育意義的猜測。如果你自己執行SELECT DISTINCT TABLE_COLUMN2 FROM TABLE,我懷疑你會發現你只返回一個值,並且TABLE_NAME中TABLE_COLUMN2等於從DISTINCT查詢返回的值的行是那些被更新的行。這可能是您的期望與數據庫中的數據不同的情況。我相信這一定是這樣,因爲如果DISTINCT查詢返回多個值,Oracle會拋出一個錯誤(如上面@ a1ex07的註釋中所述)。您可能要重寫查詢使用IN條件,如

update table_name 
    set table_column1='text' 
    where table_column2 IN (select distinct table_column2 from table) 

上TABLE_COLUMN2該指數應該對UPDATE語句的行爲沒有任何影響。

分享和享受。

相關問題