带有条件选择语句的Oracle光标



我是这个组的新手。我试图想到一个具有条件选择语句的光标。有些伪代码的样子 -

[B]cursor test_cursor is
  if condition == 't11'
  then 
    select * from test1;
  else 
    select * from test1;
  end if;[/B]
begin
  for cursorVal in test_cursor loop
    //Doing the actual task on cursor data.
  end loop;
commit;
end;

实际上,我遇到了一个方案,需要在两个不同的DDL上工作。基于某些用户输入,需要从表中的任何一个获取数据并进一步操纵过程。正如我说的,这两张桌子都是同一张DDL因此,不想创建两个不同的光标。同一业务逻辑的原因将应用于两个表数据。它只是用户输入决定哪个表需要获取数据的输入。人们如何将此视为最新数据和历史数据以及DB的设计方式。

希望我对自己的情况很清楚。

谢谢arfeen。

光标可以如下所述将其声明为联合。根据可变condition的内容,光标将基于test1或test2。

SELECT * FROM Test1 WHERE condition = 't1'
UNION ALL
SELECT * FROM Test2 WHERE condition = 't2'

您试图实现的外观可以通过更好的表或查看设计或使用批量收集来实现。如果可以的话 - 始终首先考虑数据库设计。

BEGIN
if condition == 't11' then
 SELECT XXXXXX
 BULK COLLECT INTO bulk_collect_ids
 FROM your_table1;
else
 SELECT XXXXXX
 BULK COLLECT INTO bulk_collect_ids
 FROM your_table2;
end if;
FOR indx IN 1 .. bulk_collect_ids.COUNT
LOOP
 .
 //Doing the actual task on bulk_collect_ids data.
 .
END LOOP;
END;

最新更新