PLSQL - 具有不同返回的参数游标

时间:2015-03-16 12:01:58

标签: oracle plsql

我知道标题什么也没说......但是这个论点在一行中解释起来有点“复杂”。

我写的所有代码只是一个例子,我当前的代码来自其他表等,但行为是相同的。

我已经定义了这样的游标:

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 - 难以在生产环境中调试)?

1 个答案:

答案 0 :(得分:1)

您可以明确地创建两个全局临时表 不在飞行中)

  1. emp_active_gtt
  2. emp_inactive_gtt
  3. 这样,每个临时表将分别具有活动和非活动记录的整个结果集。

    例如,在您要执行的代码中:

    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的更多信息