我有一个过程主体,其中包含查询结果的循环:
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;
请注意,如果您的表开始增长,此方法会降低您的性能。