2012-11-07 65 views
1

在下面的兩個代碼塊中,使用WHEN NO_DATA_FOUND THEN ,否則哪一個代碼使用效率高。使用哪一個是有效的'WHEN NO_DATA_FOUND THEN'或'ELSE'?

if outrowcount = 1 then  
    update Extable set CLIENT_COUNT = outCliCount where cname='xxx'; 
    outretvalue := 0; 
END IF; 
EXCEPTION 
    WHEN NO_DATA_FOUND THEN 
    outretvalue := -1; 

if outrowcount = 1 then  
    update Extable set CLIENT_COUNT = outCliCount where cname='xxx'; 
    outretvalue := 0; 
else 
    outretvalue := -1; 
+0

如果你想返回值,如果outrowcount = 1並更新記錄,那麼如果else方法會更好,而不是EXCEPTION方法恕我直言。 – user75ponic

+0

@polppan好的,那麼何時使用WHEN NO_DATA_FOUND? – user1

+1

如果您的選擇查詢無法獲取記錄,則需要使用'No_DATA_FOUND'異常來捕獲異常。一個很好的例子可以在這裏找到(http://www.orafaq.com/wiki/ORA-01403) – user75ponic

回答

4

UPDATE語句不會拋出NO_DATA_FOUND異常。它只設置隱式SQL遊標狀態,您可以使用例如SQL%ROWCOUNT來檢查該狀態。所以你的樣本將是

update Extable set CLIENT_COUNT = outCliCount where cname='xxx'; 
if SQL%ROWCOUNT = 0 then 
    outretvalue := -1; 
else 
    outretvalue := 0; 
end if; 
+0

這很有幫助,那麼在這種情況下應該使用NO_DATA_FOUND? – user1

+0

當您執行Select查詢時,應使用NO_DATA_FOUND。這是因爲,select語句不會填充SQL%ROWCOUNT。因此,一般來說,對於DML而言,不需要處理異常(因爲您永遠不會得到NO_DATA_FOUND),但對於Selects而言您應該。 –

+0

@ Vaibhav我有疑問如果我使用這樣的SELECT >>>「選擇CLIENT_COUNT從Extable其中cname ='xxx'」,而不是更新在示例Petr張貼將SQL%ROWCOUNT返回的行取或不是? – user1