繁体   English   中英

具有条件Select语句的Oracle Cursor

[英]Oracle Cursor with conditional Select statement

我是这个小组的新手。 我试图考虑使用带有条件选择语句的游标。 有些像这样的伪代码-

[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的设计方式。

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

谢谢,阿芬。

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

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

您试图实现的目标看起来可能是通过更好的表或视图设计或通过使用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;

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM