Oracle PL/SQL for loop:根据条件选择查询



我有一个过程主体,其中包含查询结果的循环:

for src in (
/* query A */
) loop
/* 
* loop body...
*/
end loop;

但是我需要根据某些条件在两个或多个不同的"查询 A"之间进行选择。查询非常不同,但它们都具有相同的结果形状,即一个数字列。

有没有办法避免重复循环代码?我可以做这样的事情吗?

if /* some condition */ then
query_A := /* ... */;
else
query_A := /* ... */;
end if;
for src in (query_A) loop
/* 
* loop body...
*/
end loop;

我使用的是甲骨文 11g

是的,你可以像这样使用光标:

DECLARE
query_a     VARCHAR2(256);
cur         SYS_REFCURSOR;
BEGIN
IF /* some condition */ THEN
query_a := 'SELECT column FROM table WHERE col1 = condition';
ELSE
query_a := 'SELECT column FROM another_table WHERE col2 = condition';
END IF;
OPEN cur FOR query_a;
LOOP
FETCH cur INTO var1, var2...varN; --> depending on how many rows you are retrieving
EXIT WHEN cur%notfound;
/* 
* loop body...
*/
END LOOP;
END;

请注意,如果您的表开始增长,此方法会降低您的性能。

最新更新