1

EMPHIRESEPCHAN特定の時間枠に基づいて、雇用され、分離され、役職が変更された従業員リストを取得するために使用される手順があります。手順は次のとおりです。

PROCEDURE EMPHIRESEPCHAN  ( p_Start in VarChar2, p_End in VarChar2,                                                           
                  p_Hire IN VarChar2, p_Sep IN VarChar2, p_Changed IN VarChar2, p_Condition1 IN VarChar2, p_Condition2 IN VarChar2) 
IS                                  

CURSOR c_emplst ( p_listtype varchar2 ) IS                                                                           
            select e.emp_id, e.name, e.Rank                                                      
            from person.emp e                                                                                                  
            where emp_id in (select distinct(emp_id) from person.promo                                                               
                    where pdate between p_startDate and p_endDate 
                    and dcode in                                                                                               
                        (select adj from support.descr where typ = 'PROMO' and smeaning = p_listtype) ); 

CURSOR c_promolst ( p_emp_id varchar2 ) IS                                                                              
       select pdate                                               
       from person.promo                                                                                                  
       where emp_id = p_emp_id                                                                                                
       order by 2 desc; 

  Begin

  for EmpRec in c_emplst ('HIRE') 
   LOOP                                                                                 
       for PromoRec in c_PromoLst ( EmpRec.emp ) 
        LOOP                                                                   
           if PromoRec.Dcode in ('TEMPORARY','RETURN','APPOINTED' )                

             -- Do all the operation                                                                  
           end if;                                                                                                      
       end loop;                                                                                                        
   end loop; 

end EMPHIRESEPCHAN;

パラメータに基づいて従業員リストを取得する手順を変更する必要がp_Condition1ありp_Condition2ます。

  • の場合p_Condition1 is not null and p_Condition2 is null、私は持っている従業員を取得する必要がありますRank = 'Developer'

  • p_Condition1 is null and p_Condition2 is not null持っている従業員を取得する必要がある場合Rank = 'Tester'

  • p_Condition1 and p_Condition2 is not null「開発者」と「テスター」の両方のランクを持つ従業員を取得する必要がある場合。

さまざまなサイトで非常に多くの投稿を読み、フォローできなかった回答を見つけました。

投稿に基づいて、次のようにカーソルに変更を加えました

CURSOR c_emplst ( p_listtype varchar2 ) IS
        select e.emp_id, e.name, e.Rank                                                      
        from person.emp e              
        where ( p_Condition1 = null and p_Condition2 = null = and emp_id in (select distinct(emp_id) from person.promo
                where pdate between p_startDate and p_endDate
                and dcode in (select adj from support.descr where typ = 'PROMO' and smeaning = p_listtype) )
    or ( p_Condition1 > null and p_Condition2 = null = and emp_id in (select distinct(emp_id) from person.promo
                where pdate between p_startDate and p_endDate
        and Rank ='Developer'
                and dcode in (select adj from support.descr where typ = 'PROMO' and smeaning = p_listtype) )
    or ( p_Condition1 = null and p_Condition2 > null = and emp_id in (select distinct(emp_id) from person.promo
                where pdate between p_startDate and p_endDate
        and Rank = 'Tester'
                and dcode in (select adj from support.descr where typ = 'PROMO' and smeaning = p_listtype) ); 

しかし、それは機能していません。

お時間をいただきありがとうございます。

4

1 に答える 1

1

これらの条件があなたの問題だと思います:

p_Condition1 = null

NULL に等しいものはありません。NULL は NULL と等しくありません。代わりに、次を使用します。

p_Condition1 IS NULL
于 2013-01-09T00:00:22.750 に答える