1

ユーザーが保留中のアプリケーションを除外できるように更新する必要があるクエリがあります。パラメータを作成し、ケースを使用して実装しようとしましたが、機能しないか、修正方法に関するエラー メッセージが表示されません。コードは次のとおりです。

select distinct pers.person_fname,
                pers.person_mname,
                pers.person_lname,
                le.nationalprovidernumber NPN,
                lic.licensenumber         LICENSE_NUMBER,
                adr.address_line1         ADDRESS1,
                adr.address_line2         ADDRESS2,
                adr.address_line3         ADDRESS3,
                adr.city                  CITY,
                sp.state_province_name    STATE,
                adr.postal_code           ZIP_CODE,
                eml.email,
                rtp.residencetype_name    RESIDENCY,
                ltp.licensetype_name      LICENSE_TYPE,
                lic.expirationdate        DATE_OF_EXPIRATION
  from odilic_admin.license lic
  inner join odilic_admin.licenseststimeline lst
  on lic.license_id = lst.license_id
  inner join odilic_admin.licenseststype lstp
  on lst.licenseststype_id = lstp.licenseststype_id
  inner join odilic_admin.licensedef ldef
  on lic.licensedef_id = ldef.licensedef_id
  inner join odilic_admin.licensetype ltp
  on ldef.licensetype_id = ltp.licensetype_id
  inner join odilic_admin.residencetype rtp
  on ldef.residencetype_id = rtp.residencetype_id
  inner join odilic_admin.licensingentity le
  on  lic.licensingentity_id = le.licensingentity_id
  inner join odilic_admin.individual ind
  on le.licensingentity_id = ind.licensingentity_id
  inner join odidir_admin.person pers
  on ind.person_id = pers.person_id
  left outer join odidir_admin.person_address_rel par
  on pers.person_id = par.person_id
  left outer join odidir_admin.address adr
  on par.address_id = adr.address_id
  left outer join odidir_admin.address_type atp
  on adr.address_type_id = atp.address_type_id
  left outer join odidir_admin.state_province sp
  on adr.state_province_id = sp.state_province_id
  left outer join
       (select pr.person_id, em.email_id, em.email
          from odidir_admin.person           pr,
               odidir_admin.person_email_rel pe,
               odidir_admin.email            em
         where pr.person_id = pe.person_id
           and pe.email_id = em.email_id
           and email_type_id = 2) eml
  on pers.person_id = eml.person_id
 where 
 ltp.licensetype_id in (:License_type)
 and lstp.licenseststype_name = 'Active'
 and atp.address_type_name = 'Mailing Licensing'
 and (lic.expirationdate >= current_date and
 trunc(lic.expirationdate) = :Expiration_Date)
 and sysdate between lst.periodbegindate and lst.periodenddate
 order by lic.licensenumber

保留中のアプリケーションを取得するには、テーブル odilic_admin.licenseappl にアクセスし、appststype = 2 (保留中) のすべてのライセンスを除外する必要があります。これを行うために、最後の左外部結合の前に結合をクエリに追加し、このパラメーターが選択されたときのケースを下部に追加しました。

select distinct pers.person_fname,
                pers.person_mname,
                pers.person_lname,
                le.nationalprovidernumber NPN,
                lic.licensenumber         LICENSE_NUMBER,
                adr.address_line1         ADDRESS1,
                adr.address_line2         ADDRESS2,
                adr.address_line3         ADDRESS3,
                adr.city                  CITY,
                sp.state_province_name    STATE,
                adr.postal_code           ZIP_CODE,
                eml.email,
                rtp.residencetype_name    RESIDENCY,
                ltp.licensetype_name      LICENSE_TYPE,
                lic.expirationdate        DATE_OF_EXPIRATION
  from odilic_admin.license lic
  inner join odilic_admin.licenseststimeline lst
  on lic.license_id = lst.license_id
  inner join odilic_admin.licenseststype lstp
  on lst.licenseststype_id = lstp.licenseststype_id
  inner join odilic_admin.licensedef ldef
  on lic.licensedef_id = ldef.licensedef_id
  inner join odilic_admin.licensetype ltp
  on ldef.licensetype_id = ltp.licensetype_id
  inner join odilic_admin.residencetype rtp
  on ldef.residencetype_id = rtp.residencetype_id
  inner join odilic_admin.licensingentity le
  on  lic.licensingentity_id = le.licensingentity_id
  inner join odilic_admin.individual ind
  on le.licensingentity_id = ind.licensingentity_id
  inner join odidir_admin.person pers
  on ind.person_id = pers.person_id
  left outer join odidir_admin.person_address_rel par
  on pers.person_id = par.person_id
  left outer join odidir_admin.address adr
  on par.address_id = adr.address_id
  left outer join odidir_admin.address_type atp
  on adr.address_type_id = atp.address_type_id
  left outer join odidir_admin.state_province sp
  on adr.state_province_id = sp.state_province_id
  **left outer join odilic_admin.licenseappl appl
  on lic.licensingentity_id = appl.licenseappl_id**
  left outer join
       (select pr.person_id, em.email_id, em.email
          from odidir_admin.person           pr,
               odidir_admin.person_email_rel pe,
               odidir_admin.email            em
         where pr.person_id = pe.person_id
           and pe.email_id = em.email_id
           and email_type_id = 2) eml
  on pers.person_id = eml.person_id
 where 
 ltp.licensetype_id in (:License_type)
 and lstp.licenseststype_name = 'Active'
 and atp.address_type_name = 'Mailing Licensing'
 and (lic.expirationdate >= current_date and
 trunc(lic.expirationdate) = :Expiration_Date)
 and sysdate between lst.periodbegindate and lst.periodenddate
**case :pending when  = yes then appl.applststype_id !=2
end**
 order by lic.licensenumber

ケースの代わりに、同じ結果で IF を使用してみました。これは次のようになります。

if :Pending = 1
then
 and appl.applststype_id != 2;
end if;

これを乗り越えるための助けは大歓迎です。これを解決するのに役立つ最も正しい答えを投票して選択してください.

4

1 に答える 1

1

パラメータが数値であり、値 1 が保留中のライセンスを除外することを示し、保留中のライセンス申請:pendingのみを除外したい場合、既存の句の代わりに次の条件を追加してみてください。case

and (:pending <> 1 or appl.applststype_id !=2)
于 2013-07-31T12:34:51.583 に答える