Postgresql-Abfrage braucht Zeit

#1:

FEHLER: fehlender FROM-Klauseleintrag für Tabelle "icm"
ZEILE 39: )att)afa auf icm.icsr...
                                                ^
SQL-Status: 42P01
Charakter: 2000

#2: Ich habe es anders versucht, aber das dauert zu lange (3+ Stunden). Der so geänderte Projektcode kann leider nicht eingefügt werden.


Fordern Sie an, den gesamten Postgresql-Code zu überprüfen und Zeit und Fehler zu reduzieren

--- Oder ein


     WÄHLEN Sie I.inv_test_id_0072
           aus Inv i,
                 icm icm,
                 gbm,
                 icc,
                 cst c,
                 ce ce,
                 co cc,
                 er2 e,
                 mtt.wrk w,
                 dh dh,
                 mtt.wt wt,
                 mtt.wll wl,
                 mtt. wa wa,
                 mtt.wpp wp,
                 mtt.mtt_psnl cp,
                 (Select WorkFlow_ARC_WFID,warfn,WorkFlow_ARC_WFNO from (select wiid WorkFlow_ARC_WFID,isrn warfn,arc_no_729 WorkFlow_ARC_WFNO from
                 mtt.workflow,gcars.inv_mtt_mapping,gcars.arc,ic
                 wo
                 isrn = srn
                 und srn = arc_no_729
                 und ARC_IC_NO_729=ic_NO_702
                 und ic_h2_702 in ('TSP','WAB')
                 )) WorkFlow_ARC,
                 (wählen Sie Kundennummer, COMM_INV_ID, COMM_RANK aus (wählen Sie isp.SCR_CUST_NO_722 Kundennummer,
                        isp.SCR_FINDER_NO_722 Finder_Nein,
                   
                        ii7 COMM_INV_ID,
                        RANK() OVER(PARTITION BY isp.SCR_CUST_NO_722, isp.SCR_FINDER_NO_722 ORDER BY isp.SCR_DATE_722 desc) COMM_RANK
                        Von inv, issp isp
                         wo isp.SCR_CUST_NO_722=inv_cust_no_720
                         und isp.SCR_FINDER_NO_722=INV_FINDER_NO_720
                         und scr_open_item_stat1_722 ist null
                         ) COMMM wobei COMM_RANK=1) COMM ,
                  
                 (Select W_ID,WC_INV_ID,CommentText,Comment_Rank from (select Distinct w.wiid W_ID,INV_ID WC_INV_ID,
                         WORKFLOW_COMMENT KommentarText,
                         RANK() OVER(PARTITION BY WC.wiid, WC.WORKFLOW_LOG_ID ORDER BY WC.WORKFLOW_LOG_ID desc) Comment_RANK
                         von inv_mtt_mapping,
                         mtt.wll WL,
                         mtt.wfc WC,
                         mtt.wf W,
                         mtt.wfa WA,
                         mtt.mtt_psnl p
                     wo
                     isrn = srn
                     Und wl.log_wiid = w.wiid
                     und p.SSO_ID = WL.log_sso_id
                     und WC.wiid = W.wiid
                     und WL.log_id = WC.Workflow_Log_id
                     und wA.Workflow_Action_Id = wl.log_action_id
                     und UPPER(WA.LOG_ACTION_DESC) = 'REQUESTED') COMnt wo Comment_RANK=1) inic,
                
                 gem,
                    
                 (wählen Sie arc_no,ARC_INV_ID, arc_sso_id, arc_pers_name
                     from (wählen Sie verschiedene inv.ii7 ARC_INV_ID,
                                   m.arc_nr_829 arc_nr,
                                   m.arc_sso_id_829 arc_sso_id,
                                   m.arc_pers_name_829 arc_pers_name,
                                   rank() over(partition by m.arc_no_829 order by m.timestamp desc, arc_sso_id_829 desc) rankt
                                 aus inv, aic, gcars.arc m
                                   wo
                                   ccn6=cn7
                                 
                                   und m.arc_role_829 = 'DO'
                                        und (m.arc_to_dt_829 ist null oder
                                               m.arc_to_dt_829 >= trunc(sysdate)))
                     wobei Ränge = 1) do_arcrole,
                    
                 (wählen Sie arc_no,ARC_INV_ID_DC, arc_sso_id, arc_pers_name
                     from (wählen Sie verschiedene inv.ii7 ARC_INV_ID_DC,
                                   m.arc_no_829 arc_nr,
                                   m.arc_sso_id_829 arc_sso_id,
                                   m.arc_pers_name_829 arc_pers_name,
                                   rank() over(partition by m.arc_no_829 order by m.timestamp desc, arc_sso_id_829 desc) rankt
                                   aus inv, aic, gcars.arc m
                                  hier
                                   ccn6=cn7
                                 
                                   und m.arc_role_829 = 'DC'
                                        und (m.arc_to_dt_829 ist null oder
                                               m.arc_to_dt_829 >= trunc(sysdate)))
                     wobei Ränge = 1) dc_arcrole,
                 arc_comment
                Wobei i.ii7 = icm.inv_id
              
                      und icm.isrn = w.srn
                  
                       und i.ii7 = ie.inv_id_730
                       und INITIAL_COMMENT.W_ID = W.wiid
                       und i.ii7 = INITIAL_COMMENT.WC_INV_ID
                       und cp.SSO_ID = wl.log_sso_id
                       und wt.workflow_type_id = w.workflow_type
                       und w.wiid nicht in (1, 2)
                       und w.wiid = wp.wiid(+)
                       und






---Postgresql


WÄHLEN
     i.inv_test_id_0072
VON
     test.inv i
     LEFT OUTER JOIN test.act ON ( inv_cre_an_720 = an_729 )
     LEFT OUTER JOIN actc ON ( an_729 = an_689 ), --test.inv_cmt_mapping icm, gebm, test.icc, test.cust c,
     test.ce ce, test.co cc, test.er e,
     atc.wrk w LEFT OUTER JOIN atc.wp wp ON w.wiid = wp.wiid LEFT OUTER join atc.wl wl ON (w.wiid = lwiid)
     LEFT OUTER JOIN atc.wa wa ON (wl.laci = wa.wiiad und wa.acc = 6),
     test.iee dh atc.wtt wt, --atc.wl wl, --atc.wa wa, --atc.wpp wp,
     atc.mtc_psnl cp left join (Wählen Sie wfid,wfrn,WorkFlow_ARC_WFNO
     from (wählen Sie wiid wfid,icm.icsrn wfrn,
     an7 wfnn von atc.workflow,test.invcm,test.arc,test.invc,
    
     test.invcm icm
     WO icm.icsrn =
     (CASE WENN srn NULL IST ODER srn='' THEN '0' ELSE srn END )::NUMERIC
     und srn::numeric = an7 und ain9=in2 und ih2 in ('TSP','WAB')
     )att)wfrc on icm.icsrn=wfrc.wfrn left join (Wählen Sie wfid,wfrn,wfnn
     from (wählen Sie wiid wfid,icsrn wfrn,
     an7 wfnn von
     atc.workflow,test.invcm,test.arc,test.invc
     WO icsrn =
     (FALL --srn
     WHEN srn IST NULL ODER srn='' THEN '0' ELSE srn END ::NUMERIC
     und srn::numeric = an7 und ain9=in2
     und ih2 in ('TSP','WAB')
     )att)wfrc ein (w.srn=wfrc.wfrn)
     left join (wählen Sie Kunden_Nr., Finder_Nr., SP_Datum, Kontakt_Typ,
     contact_result,next_Action,COMM_INV_ID,COMM_RANK from (select isp.SCR_CUST_NO_722 Cust_No,
     isp.SCR_FINDER_NO_722 Finder_Nr, isp.SCR_DATE_722 SP_Datum,
     isp.SCR_CONTACT_TYPE_722 Kontakttyp, SCR_CONTACT_RESULT_722 Kontaktergebnis,
     SCR_NEXT_ACTION_722 next_Action, inv_test_id_0072 COMM_INV_ID,
     RANK() OVER(PARTITION BY isp.SCR_CUST_NO_722, isp.SCR_FINDER_NO_722 ORDER BY isp.SCR_DATE_722 desc) COMM_RANK
     Aus test.inv, test.inv_scratch_pad isp wobei isp.SCR_CUST_NO_722=inv_cust_no_720
     und isp.SCR_FINDER_NO_722=INV_FINDER_NO_720 und scr_open_item_stat1_722 ist null

) COMMM wo COMM_RANK=1) COMM an (i.inv_test_id_0072 = COMM.COMM_INV_ID),
     (Wählen Sie W_ID, WC_INV_ID, Kommentartext, Kommentarrang aus
     (wählen Sie Distinct w.wiid W_ID,INV_ID WC_INV_ID,
     WORKFLOW_COMMENT CommentText, RANK() OVER(PARTITION BY WC.wiid, WC.WORKFLOW_LOG_ID
     ORDER BY WC.WORKFLOW_LOG_ID desc) Comment_RANK aus test.invcm,
     atc.workflow_log WL, atc.Workflow_Comments WC,
     atc.Workflow W, atc.Workflow_actions WA,
     atc.mtc_psnl p WO icsrn =
     (CASE WENN srn NULL IST ODER srn='' THEN '0' ELSE srn END )::NUMERIC
     Und wl.lwiid = w.wiid und p.SSO_ID = WL.log_sso_id
     und WC.wiid = W.wiid und WL.log_id = WC.Workflow_Log_id
     und wA.wiiad = wl.laci
     und UPPER(WA.LOG_ACTION_DESC) = 'REQUESTED') COMnt wo Comment_RANK=1) INITIAL_COMMENT--,
     --Bogen,
     left join (wählen Sie eine,ARC_INV_ID, asid, apn
     from (wählen Sie eindeutige inv.inv_test_id_0072 ARC_INV_ID,
     rank() over(partition by m.an_829 order by m.timestamp desc, arc_sso_id_829 desc) Ränge
    
     aus inv, aicv, test.arc m wo
     ccn6=icn7 und m.arc_role_829 = 'DO'
     und (m.arc_to_dt_829 ist null oder m.arc_to_dt_829 >= date_trunc('day',CURRENT_DATE)))aats
     wobei Ränge = 1) do_arcrole on (an7 = do_arcrole.an)
      links

BEITRETEN (
         WÄHLEN
             ein,
             arc_inv_id,
             arc_sso_id,
             apn
         VON
             (
                 WÄHLEN SIE UNTERSCHIEDLICH
                     inv.inv_test_id_0072 arc_inv_id,
                     RANG() ÜBER(
                         PARTITION DURCH m.an_829
                         SORTIEREN NACH
                             m.timestamp DESC, arc_sso_id_829 DESC
                     ) Reihen
                 VON
                     inv,
                     arc_inv_connector,
                     test.arc_roles m
                 WO
                     ccn6 = icn7
                     UND m.arc_role_829 = 'TUN'
                     UND (m.arc_to_dt_829 IST NULL
                           ODER m.arc_to_dt_829 >= date_trunc('day', current_date) )
             ) aat
         WO
             Ränge = 1
     ) do_arcrole EIN ( i.inv_test_id_0072 = do_arcrole.arc_inv_id )
LINKS VERBINDEN
                 ( WÄHLEN
     ein,
     arc_inv_id_dc,
     arc_sso_id,
     arc_pers_name
VON ( AUSWÄHLEN DISTINCT
     inv.inv_test_id_0072 arc_inv_id_dc,
     m.an_829 ein,
     m.arc_sso_id_829 arc_sso_id,
     m.arc_pers_name_829 arc_pers_name,
                                               WO
                                               UND m.arc_role_829 = 'DC' m.arc_to_dt_829 >= date_trunc('day',CURRENT_DATE)))asww
WO Ränge = 1) dc_arcrole ON (
   an7 = dc_arcrole.an
)
LINKS VERBINDEN
(
        WÄHLE ein,
               arc_inv_id_dc,
               arc_sso_id,
               arc_pers_name
        WO Ränge = 1) dc_arcrole ON (
   i.inv_test_id_0072 = dc_arcrole.arc_inv_id_dc
)
--arc_comment
WO i.inv_test_id_0072 = icm.inv_id
-- und icm.icsrn = w.srn
UND
icm.icsrn = (
FALL
WENN srn NULL IST
   ODER
   srn='' DANN
   '0'
   ELSE srn
ENDE ): :numerisch
UND i.inv_test_id_0072 = dh.inv_id_730
     UND inkl.w_id = w.wiid
         UND i.inv_test_id_0072 = inkl.wc_inv_id
             UND cp.sid = wl.lsid
                 UND wt.wti = w.workflow_type
                     UND w.wiid NICHT IN (
     1,
     2
)
                         UND icst = cn7
                             UND inv_ic_no_720 = in2
                                 UND ih2 IN (
     'TSP',
     'WAB'
)
                                     UND ce.ci2 = ci7
                                         UND ccn7 = cc.cn7
                                             UND e.ext = 'CM'
                                                 UND e.ecf = inv_curr3_720
                                                     AND e.ect = 'USD'
                                                         UND pid5 = ih2
                                                             UND Gebot5 = ic_h3_702
                                                                 UND sbi5 = ic_h4_702 BESTELLUNG
     von w.wiid;

das ist schwer bis gar nicht nachvollziehbar. Aus was soll sich Zeile 39 beziehen? Warum hast Du das SQL ins deutsche übersetzt? Wenn da aus SELECT ein WÄHLEN wird wird es schwer lesbar.

Ah, die Fehlermeldung kommt wohl von

WÄHLEN
     i.inv_test_id_0072
VON
     test.inv i
     LEFT OUTER JOIN test.act ON ( inv_cre_an_720 = an_729 )
     LEFT OUTER JOIN actc ON ( an_729 = an_689 ), --test.inv_cmt_mapping icm, gebm, test.icc, test.cust c,
     test.ce ce, test.co cc, test.er e,
     atc.wrk w LEFT OUTER JOIN atc.wp wp ON w.wiid = wp.wiid LEFT OUTER join atc.wl wl ON (w.wiid = lwiid)
     LEFT OUTER JOIN atc.wa wa ON (wl.laci = wa.wiiad und wa.acc = 6),
     test.iee dh atc.wtt wt, --atc.wl wl, --atc.wa wa, --atc.wpp wp,
     atc.mtc_psnl cp left join (Wählen Sie wfid,wfrn,WorkFlow_ARC_WFNO
     from (wählen Sie wiid wfid,icm.icsrn wfrn,
     an7 wfnn von atc.workflow,test.invcm,test.arc,test.invc,

     test.invcm icm
     WO icm.icsrn =
     (CASE WENN srn NULL IST ODER srn='' THEN '0' ELSE srn END )::NUMERIC
     und srn::numeric = an7 und ain9=in2 und ih2 in ('TSP','WAB')
     )att)wfrc on icm.icsrn=wfrc.wfrn left join (Wählen Sie wfid,wfrn,wfnn

An dieser Stelle ist ganz offensichtlich keine Tabelle icm in der Lister der Quelltabellen definiert.

Was die Abfragezeit betrifft: nutze EXPLAIN bzw. EXPLAIN ANALYSE, um anhand des Planes zu sehen, WO diese Zeit verloren geht.