我是这个小组的新手。我试图想到一个带条件选择语句的游标。 有些像伪代码 -
[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。
答案 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;