我们有一个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