Oracle
 sql >> Baza danych >  >> RDS >> Oracle

Skorelowane podzapytanie działa inaczej dla Oracle 12c i 11g

Udało mi się rozwiązać ten problem dzięki rozwiązaniu dostarczonemu przez eksperta SQL Chris Saxon używanie z WITH CTE. Wcześniej używałem go jako głównej tabeli sterującej, ale okazuje się, że powinien to być przy zapytaniach korelacji, jak poniżej:

with ar_kbox_details as (
  select ab_info_n3  trx_id,
         ab_info_v5  box,
         ab_info_n1  amount
  from xxab_zz_vat_trx_gt
  where ab_info_v1 = 'AR'
  and ab_info_v5 <> 'tns:'
  union all
  select ab_info_n3  trx_id,
         ab_info_v6  box,
         ab_info_n2  amount
  from xxab_zz_vat_trx_gt
  where ab_info_v1 = 'AR'
  and ab_info_v6 <> 'tns:'
)
SELECT XMLAGG(XMLCONCAT(XMLElement
("tns:SprzedazWiersz",
    xmlelement("tns:LpSprzedazy"      ,   rownum),
    xmlelement("tns:KodKrajuNadaniaTIN",  substr(ar_trx.tax_reg_num, 0, 2)),
    xmlelement("tns:NrKontrahenta"    ,   substr(ar_trx.tax_reg_num, 2)),
    xmlelement("tns:NazwaKontrahenta" ,   ar_trx.cust_name),
    xmlelement("tns:DowodSprzedazy"   ,   ar_trx.trx_number),
    xmlelement("tns:DataWystawienia"  ,   TO_CHAR(ar_trx.invoice_date,'RRRR-MM-DD')),
    Case When ar_trx.sales_date is not null Then xmlelement("tns:DataSprzedazy"    ,   TO_CHAR(ar_trx.sales_date,'RRRR-MM-DD')) END
    -- Document Type
    ,(select distinct xmlagg(xmlconcat(xmlelement("tns:TypDokumentu", ab_info_v15)))
    From   xxab_zz_vat_trx_gt
    Where  ab_info_v1 = 'AR'
    and ab_info_n3 = ar_trx.trx_id
    and ab_info_v16 = 'ORA_JEPL_DOCUMENT_TYPE')
    -- product category code
    ,(select distinct xmlagg(xmlconcat(xmlelement(evalname(ab_info_v13), 1)))
    from    xxab_zz_vat_trx_gt
    Where ab_info_V1 = 'AR'
    and ab_info_v13 <> 'tns:'
    and ab_info_n3  = ar_trx.trx_id)
    -- Trade Attributes
    ,(select distinct xmlagg(xmlconcat(xmlelement(evalname(DECODE(TRADE_ATTRIBUTE_VALUES, '1', 'tns:MPP', TRADE_ATTRIBUTE_VALUES)), 1))
    order by 
    case TRADE_ATTRIBUTE_VALUES
    when 'tns:SW'           THEN 1
    when 'tns:EE'           THEN 2
    when 'tns:TP'           THEN 3
    when 'tns:TT_WNT'           then 4
    when 'tns:TT_D'         THEN 5
    when 'tns:MR_T'         THEN 6
    when 'tns:MR_UZ'            THEN 7
    when 'tns:I_42'             THEN 8
    when 'tns:I_63'             THEN 9
    when 'tns:B_SPV'            THEN 10
    when 'tns:B_SPV_DOSTAWA'  THEN 11
    when 'tns:B_MPV_PROWIZJA' THEN 12
    when 'tns:MPP'          THEN 13
    ELSE 14 END)
    from     xxab_zz_vat_trx_gt unpivot (TRADE_ATTRIBUTE_VALUES for TRADE_ATTRIBUTES in (ab_info_v12, ab_info_v20))
    Where  ab_info_V1 = 'AR'
    and  TRADE_ATTRIBUTE_VALUES not in ('tns:', 'tns:IMP', '0')
    and  ab_info_n3 = ar_trx.trx_id
    )
    --KBoxes
    ,(select xmlagg(xmlconcat(xmlelement(evalname(fnd_box.box),ROUND(sum(nvl(akd.amount, 0)),2))))
    from    ar_kbox_details akd
        ,   (SELECT 'tns:K_'||(LEVEL + 9) box
            FROM dual
            CONNECT BY LEVEL <= 27) fnd_box     
    where fnd_box.box = akd.box (+)
    and   ar_trx.trx_id = akd.trx_id (+)
    group by fnd_box.box)
    )))
From ( Select distinct 
        ab_info_n3  trx_id
    ,   ab_info_v2  trx_number
    ,   ab_info_d1  sales_date
    ,   ab_info_d3  invoice_date
    ,   ab_info_v3  cust_name
    ,   ab_info_v17 cust_addr
    ,   ab_info_v7  tax_reg_num
From xxab_zz_vat_trx_gt
Where ab_info_v1 = 'AR'
Order by 3,4) ar_trx                                                



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Jak uzyskać automatycznie zinkrementowany PK z bazy danych Oracle?

  2. Pole w pliku danych przekracza maksymalną długość - błąd

  3. ORA-01861:literał nie pasuje do ciągu formatu

  4. Binarny tryb PL/SQL FTP API a tryb ascii

  5. Przykład wyzwalacza Oracle przed wstawieniem lub aktualizacją