2012-11-14 47 views
2

是否可以在PL/SQL 10g中做這樣的事情?oracle 10g pl/sql條件循環選擇

if user_is_goat = 1 then 
    for item_rec in (select * from pricing_for_goats) 
else 
    for item_rec in (select * from pricing_for_non_goats) 
end if; 
loop 
. 
. 
end loop; 

看來,當Oracle看到「在選擇REC *從雙反」,預計「循環」,以立即採取後續。我在循環中的代碼是很多行,我不想保存它的兩個副本。

回答

2
下面

嘗試查詢,這將檢查是否從其他for_goats可變user_is_goat = 1並返回數據它將從for_non_goats

for item_rec in 
(
    select * from pricing_for_goats where user_is_goat = 1 
    union 
    select * from pricing_for_non_goats where user_is_goat <> 1 
) 
loop 
..... 
..... 
end loop; 
+0

我喜歡它返回,但只有在兩個表是兼容的工作 – Gerrat

+0

所以不能您將*替換爲您需要的列的列表。你必須知道它們是什麼,因爲你在循環中使用它們,對吧? – eaolson