我們有一個select
語句,根據開關的不同而不同。然後我們循環結果。PL/SQL預先定義的語句在光標定義中
目前的代碼如下所示:
if switch_a then
for rec in
(
select *
order by decode(x, y,1,0),
decode(x,a,2,0),
decode(x,z,3,0), pos
)
loop ...
end loop;
else
for rec in
(
select *
order by decode(x, y,1,0),
decode(x,z,3,0), pos
)
loop ...
end loop;
end if;
現在我想改變這種代碼只有一個循環。所以,我去:
if (switch_a) then
Statement call := select*...
else
Statement call := select*...
end if;
for rec in call
loop
end loop;
的問題是,我不知道這是否在爲REC在和我不知道如何定義一個可執行的SQL語句。這是可能的,如果是這樣,你能舉個例子嗎?
似乎是部分sollution。然而,我將不得不在函數外定義遊標,這將不允許用兩個不同的語句填充同一個遊標,具體取決於我從If語句中得到的結果。 這將導致我仍然不得不使用兩個不同的循環,並且我不會獲得更乾淨的代碼。 我錯過了什麼? – user3655855
它只是在您的查詢中的順序不同嗎?你沒有在你的例子中包括from和where子句,所以很難說清楚。 I3rutt的答案的一個替代方法是將兩個循環內部的所有邏輯放入一個單獨的過程(使用必要的參數),然後您只需從兩個循環內部調用過程。 – Boneist
該聲明僅在「order by」部分有所不同。 如果開關是真的,還有一個額外的條件順序, – user3655855