2012-01-27 20 views
1

我想用光標內嵌視圖查詢

DELETE FROM (SELECT ROWNUM RM, S from mytemp) where rm > 20; 

錯誤刪除一些記錄,我最近增加了,從這個表MYTEMP,請告訴我,什麼是錯的這個查詢,已被填充在選定列 數據是:

ORA-01732:數據處理操作這一觀點

+0

DELETE FROM預計一張桌子的名字'DELETE FROM MYTEMP WHERE ...'也許? – 2012-01-27 21:45:06

+0

好吧,所以我們不能從內聯視圖中刪除? – ratsy 2012-01-27 21:49:47

回答

2

編輯的準確性不合法......

這裏的DESCR

http://ora-01732.ora-code.com/

試圖使用一個UPDATE,INSERT,或對包含表達式或函數,或從多個 不是一個被衍生的 視圖DELETE語句:你所得到的錯誤iption表。如果使用連接操作來創建視圖,或者視圖包含從函數或表達式派生的虛擬列,則可以僅查詢視圖。

所以它看起來像一個可更新的視圖可以代替一個表,只要它不加入多個表或使用虛擬列。在你的情況下,問題是虛擬的ROWNUM列。

+0

謝謝,但我們如何使用'rownum> 20',wouldnt它總是返回false ..我想確認我們只能選擇使用內聯視圖..我們不能使用內聯視圖做數據處理..? – ratsy 2012-01-27 22:06:37

+0

你說得對,那是一個糟糕的解決方案。我編輯了我的帖子,解釋爲什麼它不起作用並刪除了錯誤的SQL。 – 2012-01-27 22:13:26

+0

謝謝Danimal,我還是不明白什麼是虛擬的rownum專欄?我的意思是內聯視圖的輸出爲'rm'爲rownum列,然後刪除那些rm值大於20的記錄。也可以解釋一下這個虛擬rownum ..再次感謝 – ratsy 2012-01-27 22:19:57

1

這是rownum>20聲明。

ROWNUM> x,其中大於正整數的x值總是假。

select * from ANYTABLE where rownum>(ANY POSITIVE INTEGER) 

不返回任何記錄。

獲取的第一行被賦予ROWNUM爲1,並使條件成爲假。要獲取的第二行現在是第一行,並且還分配了1的ROWNUM並使條件成爲假。隨後所有行都無法滿足條件,因此不會返回行。

查詢THIS瞭解更多信息。

你可以做到以下幾點:

delete from (select amount from TABLE t where t.amount=1000) 

但它一樣

delete from TABLE where amount=1000 
+0

thnx bonsvr,你知道這但我想要做的是通過內聯視圖刪除soem記錄..我認爲我們可以選擇使用內聯視圖n通過將rownum作爲實際列... – ratsy 2012-01-27 22:34:34

+0

@ratsy yes you can。 'alter table mytemp add row_col number; 更新mytemp設置row_col = rownum;' – bonsvr 2012-01-27 22:37:49

+0

謝謝bonsvr,是的,這解決了我的目的爲tiem :)謝謝...但我仍想知道我們是否不能使用內聯視圖刪除 – ratsy 2012-01-27 22:57:40