2014-01-29 30 views
0

所以我正在學習Transact-SQL,它沒有elsif等價物,只有一個僞結構,否則如果它實際上是一個嵌套的if ... else。我已經是PL/SQL程序員大約8年了,所以我一直在使用if ... elsif ... else而沒有真正考慮它。我知道elsif將執行保存在一個邏輯塊與一系列嵌套塊之間,但除了使用elsif和嵌套if的可讀性之外,還有一個原因嗎?從本質上講,將它們保持在一個邏輯塊中會有效率增益還是其他好處?除了可讀性以外,如果在PL/SQL中使用elsif和nested,還有其他什麼原因嗎?

例如,我可以這樣做:

if x = 1 then 
    dbms_output.put_line('foo'); 
elsif x=3 then 
    dbms_output.put_line('foo2'); 
else 
    dbms_output.put_line('foo3'); 
end if; 

或者我可以這樣做:

if x=1 then 
    dbms_output.put_line('foo1'); 
else 
    if x=3 then 
     dbms_output.put_line('foo2'); 
    else 
     dbms_output.put_line('foo3'); 
    end if; 
end if; 

我知道使用的第一個例子PL/SQL最佳實踐建議,但如果我很好奇,有除了無關的「end if」之外,這也是它的一個原因。當你經歷2或3級的深度時會出現凌亂的縮進。有什麼想法嗎?

+1

我想你回答了你自己的問題。 – OldProgrammer

+0

你可以看看你的代碼。你可以發現一個簡單和可讀性較低的代碼。 ;) – Avrajit

+1

無視可讀性,目的本身是不同的。在你的情況下,他們看起來多餘,但實際上並非如此它不僅適用於PL/SQL .. IF-ELSIF非常像SWITCH ..一次只能執行一個。 Where-as嵌套IF可以靈活地給出多重條件檢查。所以選擇你喜歡的東西!這就像選擇/同時循環! –

回答

1

我更仔細地閱讀了甲骨文的風格指南,並指出甲骨文確實表示他們在執行方式以及期望的性能方面是相同的。因此,除了將條件與If ... elsif ... else與離散條件語句邏輯鏈接在一起之外,Oracle在執行語句方面沒有任何好處。我很欣賞所有關於此的答覆。

相關問題