2016-08-10 5 views
-1

Как объединить эти два примера курсора внизу, чтобы они извлекали данные для всех 4 условий: все, конфеты, торт, попкорн; в петле цикла?Курсор для цикла

У меня есть 3 сеанса/глобальные переменные, которые могут быть пустая строка

 

    s_Candy Varchar2(5); 
    s_Cake Varchar2(5); 
    s_Popcorn Varchar2(5); 

 


    Cursor My_All_Cur Is 
     ... Gets all values 
     Select * From My_Table t Where t.State = 'A'; 

 


    Cursor My_Other_Cur Is 
     ... Gets data by condition 
     From My_Table t 
     Where t.State = 'A' 
      And (t.Candy_Lovers = s_Candy 
      Or t.Cake_Lovers = s_Cake 
      Or t.Popcorn_Lovers = s_Popcorn); 

 


    For i In My_Unified_Cur Loop 
     ... do stuff 
    End Loop; 

+0

... я думаю, что я получил его отсортирован – plainAF

+1

Тогда после того, что вы получили его для справки в аудитории. – XING

+0

Я отправил свой ответ ниже. Не знаю, почему я спустился - проголосовал. Люди должны быть немного более расслабленными. – plainAF

ответ

1

Решение состоит в том, чтобы союз все 2 курсоры и состояние их через

s_All_Id
который также глобальная переменная.

 

    s_Candy Varchar2(5); 
    s_Cake Varchar2(5); 
    s_Popcorn Varchar2(5); 
    s_All_Id Varchar2(1) := 'N'; 

 

    If s_Candy Is Null And s_Cake Is Null And s_Popcorn Is Null Then 
     s_All_Id := 'Y'; 
    End If; 

 

    Cursor My_All_Cur Is 
     Select * 
      From My_Table t 
      Where s_All_Id = 'Y' 
      And t.State = 'A' 
     Union All 
     Select * 
      From My_Table t 
      Where s_All_Id = 'N' 
       And t.State = 'A' 
       And (t.Candy_Lovers = s_Candy 
       Or t.Cake_Lovers = s_Cake 
       Or t.Popcorn_Lovers = s_Popcorn);