带有条件Select语句的Oracle Cursor

时间:2014-01-24 07:20:35

标签: sql 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 所以不想创建两个不同的游标。同一业务逻辑的原因将应用于两个表数据。它只是用户输入决定哪个表需要获取数据。一些人如何将此视为最新数据和历史数据以及数据库的设计方式。

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

谢谢, Arfeen。

2 个答案:

答案 0 :(得分:1)

可以将游标声明为联合,如下所述。根据变量condition的内容,光标将基于Test1或Test2。

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

答案 1 :(得分:0)

您要实现的目标看起来可以通过更好的表格或视图设计或使用BULK COLLECT来实现。 如果可以 - 始终首先考虑数据库设计而不是代码。

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;