我知道标题什么也没说......但是这个论点在一行中解释起来有点“复杂”。
我写的所有代码只是一个例子,我当前的代码来自其他表等,但行为是相同的。
我已经定义了这样的游标:
CURSOR emp_cur (l_type)
IS
with emp_general AS (select *
from emp
where type = l_type),
emp_active AS (select *
from emp_geral
where status = ACTIVE_STATUS),
emp_inactive AS (select *
from emp_general
where status = INACTIVE_STATUS)
select distinct name, department
from emp_active
minus
select distinct name, department
from emp_inactive;
此光标采用过滤器emp类型的参数,并使用减号来获取 ACTIVE - INACTIVE \ temp。
此光标返回名称和部门。
现在必须使用不同的“select”statemant声明不同的游标,例如:
select location
from emp_active
select location
from emp_active
我想不要复制我的光标只是为了更改选择。 有一种方法可以做到这一点并避免代码重复(不使用DynamicSQL - 难以在生产环境中调试)?
答案 0 :(得分:1)
您可以明确地创建两个全局临时表 (不在飞行中):
这样,每个临时表将分别具有活动和非活动记录的整个结果集。
例如,在您要执行的代码中:
insert into emp_active_gtt
select *
from ....
where status ='ACTIVE'
同样,对于非活动记录:
insert into emp_inactive_gtt
select *
from ....
where status ='INACTIVE'
您现在可以在会话范围内使用两个表来获取所需的行。
在此处https://docs.oracle.com/database/121/SQLRF/statements_7002.htm#i2153132
的文档中阅读有关GTT的更多信息