select * from DLMIS.to_media where delete_flag <> 1 and create_human_id = 104867 and relation_type_id = 77 order by create_time desc limit 1 ; 与 select * from DLMIS.to_media where delete_flag <> 1 and create_human_id = 1 and relation_type_id = 602 order by create_time desc limit 1 什么情况下会导致他们的执行效率出现巨大差距

时间: 2025-04-03 14:16:46 AIGC 浏览: 47
<think>好的,我需要帮助用户分析两个SQL查询在什么情况下执行效率会有巨大差距。这两个查询结构类似,都是对同一张表DLMIS.to_media进行查询,条件都是delete_flag不等于1,不同的create_human_id和relation_type_id,然后按create_time降序取第一条。用户想知道什么情况下这两个查询的执行效率会差异很大。 首先,我应该考虑索引的影响。这两个查询的where条件字段是delete_flag、create_human_id、relation_type_id,排序字段是create_time,limit 1。如果表中存在合适的索引,可以加快查询速度。比如,如果有一个联合索引包含create_human_id和relation_type_id,再加上create_time,可能会让查询走索引快速定位数据,避免全表扫描。但如果两个查询使用的字段在索引中的情况不同,比如一个查询的字段在索引中,另一个不在,就会导致效率差异。 接下来,数据分布差异也是一个因素。如果create_human_id=104867和relation_type_id=77的组合对应的数据量非常少,而另一个组合create_human_id=1和relation_type_id=602的数据量很大,那么前者可能很快找到符合条件的记录,而后者需要扫描更多数据,导致性能下降。特别是当没有索引时,这种情况更明显。 然后,排序操作的影响。order by create_time desc需要排序,如果数据量大,排序会消耗较多资源。如果数据库可以利用索引的有序性避免排序,比如索引已经按create_time降序排列,那么查询效率会高很多。如果一个查询能利用这样的索引,而另一个不能,就会导致效率差异。 还有统计信息的准确性和执行计划的不同。如果表的统计信息过时,优化器可能选择不同的执行计划,比如全表扫描和索引扫描。如果两个查询被优化器评估出不同的执行计划,效率自然不同。比如一个走索引,另一个走全表扫描,速度差异就会很大。 此外,缓存的影响也不能忽视。如果第一个查询的数据已经被缓存,而第二个没有,会导致执行时间差异。但用户可能更关注的是查询本身的效率,而不是缓存因素,所以可能需要提醒用户注意这一点。 最后,硬件和并发情况也可能影响,比如磁盘I/O速度、CPU负载等,但这些属于外部因素,可能不在用户考虑范围内。需要综合以上因素,给出可能导致效率差异的情况,并建议用户检查索引、数据分布、执行计划等。 总结起来,应该从索引使用情况、数据量差异、排序优化、执行计划选择等方面进行分析,并给出具体的检查建议,比如查看执行计划,分析索引情况,检查数据分布等,帮助用户定位问题。</think>这两个SQL查询的执行效率可能出现显著差异的主要原因是**索引使用情况**与**数据分布特征**的差异。以下是详细分析: --- ### $\boxed{1. 索引覆盖差异}$ **核心因素**:是否命中有效索引 - **理想情况**:若存在复合索引 `(create_human_id, relation_type_id, create_time)` 两个查询均可通过索引快速定位数据,效率相近 - **问题场景**:若索引缺失或仅部分覆盖 - 查询1:`create_human_id=104867`可能匹配索引前导列 $\Rightarrow$ 走索引范围扫描,快速定位数据 - 查询2:若`create_human_id=1`的数据量极大且无有效索引 $\Rightarrow$ 触发全表扫描 + 排序,效率骤降 --- ### $\boxed{2. 数据分布特性}$ | 特征项 | 查询1 (104867,77) | 查询2 (1,602) | |--------------|-------------------------|------------------------| | **匹配数据量** | 少量记录(如10行) | 海量记录(如10万行) | | **排序代价** | 内存排序即可完成 | 可能触发磁盘临时表排序 | | **结果位置** | 最新记录在物理存储前端 | 最新记录在存储末端 | --- ### $\boxed{3. 执行计划对比}$ 通过`EXPLAIN`分析验证实际执行路径: **高效执行计划示例**(使用索引): ```sql OPERATION OPTIONS OBJECT_NAME ------------------------------------------------------------------ SELECT STATEMENT LIMIT COUNT=1 SORT ORDER BY BUFFER SORT INDEX RANGE SCAN IDX_COLUMNS -- 使用复合索引 ``` **低效执行计划示例**(无索引): ```sql OPERATION OPTIONS OBJECT_NAME ------------------------------------------------------------------ SELECT STATEMENT LIMIT COUNT=1 SORT ORDER BY BUFFER SORT TABLE FULL SCAN TO_MEDIA -- 全表扫描 ``` --- ### $\boxed{优化建议}$ 1. **索引检查**: ```sql -- 查看表索引结构 SELECT * FROM USER_INDEXES WHERE TABLE_NAME='TO_MEDIA'; -- 查看索引字段 SELECT * FROM USER_IND_COLUMNS WHERE TABLE_NAME='TO_MEDIA'; ``` 2. **执行计划分析**: ```sql EXPLAIN PLAN FOR SELECT * FROM DLMIS.to_media WHERE delete_flag <> 1 AND create_human_id = 104867 AND relation_type_id = 77 ORDER BY create_time DESC LIMIT 1; ``` 3. **统计信息更新**(DBA操作): ```sql ANALYZE TABLE DLMIS.to_media COMPUTE STATISTICS; ``` --- ### $\boxed{关键结论}$ 当出现以下情况时会导致显著性能差异: 1. **索引未覆盖查询2的条件字段** 2. **查询2的条件值对应数据量级远大于查询1** 3. **最新数据物理存储位置差异(HDD机械盘尤为明显)** 4. **达梦数据库优化器错误选择执行计划** 建议通过`EXPLAIN`工具确认实际执行路径,针对性添加复合索引优化。
阅读全文

相关推荐

SELECT t1.tenant_id, t1.county, IFNULL(SUM(t3.PERIOD = '2' AND t3.DATA_SOURCE = '2' AND t3.IS_CROSS_COUNTY = '0'),0) - (SELECT COUNT(*) FROM biz_reg_cross t5 WHERE t1.TENANT_ID = t5.TO_TENANT_ID AND t5.AUDIT_STATUS = '4') + (SELECT COUNT(*) FROM biz_reg_cross t6 WHERE t1.TENANT_ID = t6.FROM_TENANT_ID AND t6.AUDIT_STATUS = '4') AS graduateNum, (SELECT COUNT(*) FROM biz_reg_cross t5 WHERE t1.TENANT_ID = t5.TO_TENANT_ID AND t5.AUDIT_STATUS = '4') AS goInNum, (SELECT COUNT(*) FROM biz_reg_cross t6 WHERE t1.TENANT_ID = t6.FROM_TENANT_ID AND t6.AUDIT_STATUS = '4') AS goOutNum, count( CASE WHEN t3.period = '2' AND t3.IS_CROSS_COUNTY = '2' AND t3.CERT_STATUS = '1' THEN t3.id END ) AS OutInNum, count( CASE WHEN t3.period = '2' AND t3.submit_flag = '1' AND t3.IS_CROSS_COUNTY = '0' THEN t3.id END ) AS juniorSubmitNum, count( CASE WHEN t3.period = '2' AND t3.IS_CROSS_COUNTY = '0' THEN t3.id END ) AS juniorAuditNum, count( CASE WHEN t3.period = '2' AND t3.IS_CROSS_COUNTY = '0' AND t3.CERT_STATUS = '1' THEN t3.id END ) AS juniorAuditPassNum, count( CASE WHEN t3.period = '2' AND t3.IS_CROSS_COUNTY = '0' AND t3.CERT_STATUS = '2' THEN t3.id END ) AS juniorauditNotPassNum, count( CASE WHEN t3.period = '2' AND t3.IS_CROSS_COUNTY = '0' AND t3.CERT_STATUS = '3' THEN t3.id END ) AS juniorAuditGoUpadteNum, count( CASE WHEN t3.period = '2' AND t3.IS_CROSS_COUNTY = '0' AND t3.submit_flag = '0' THEN t3.id END ) AS juniorAuditNotSubmitNum, count( CASE WHEN t3.period = 2 AND ifnull( enroll_sch_code, 0 ) <> 0 THEN t3.id END ) AS middleDistNum, count( CASE WHEN t3.period = 2 AND t3.accept_status = 3 AND t3.STATUS = 1 THEN t3.id END ) AS middleAcceptNum, count( CASE WHEN t3.period = 2 AND t3.is_enroll = 1 THEN t3.id END ) AS middleEnrollNum FROM tenant_baseinfo t1 LEFT JOIN biz_reg_info t3 ON t1.tenant_id = t3.tenant_id LEFT JOIN tenant_relation t4 on t1.tenant_id = t4.tenant_id WHERE t4.parent_tenant_id = '3e27a485999544ffa056d66c78cecb76' GROUP BY t1.tenant_id, t1.county ORDER BY t4.sort_no; 优化上面这段SQL

WITH purNo AS ( SELECT T .pinv_id, STRING_AGG ( DISTINCT T.NO, ',' ) AS nos FROM ( SELECT A .pinv_id, C.psm_no AS NO FROM pay_ginv_row A INNER JOIN pur_psm C ON A.psm_id = C.psm_id AND C.del_flag = FALSE WHERE A.del_flag = FALSE AND A.psm_id IS NOT NULL UNION ALL SELECT A .pinv_id, C.psp_no AS NO FROM pay_ginv_row A INNER JOIN pur_psp C ON A.psp_id = C.psp_id AND C.del_flag = FALSE WHERE A.del_flag = FALSE AND A.psp_id IS NOT NULL ) T GROUP BY T.pinv_id ), invoiceNos AS ( SELECT pinv_id, STRING_AGG ( INVOICE_NO, ',' ORDER BY INVOICE_NO ) AS invoiceNos FROM PAY_PINV_INV WHERE DEL_FLAG = FALSE GROUP BY pinv_id ) SELECT payPinv.*, basCurr.CURR_NAME_CN currNameCn, basCurr.CURR_NAME_EN currNameEn, payPinv.BU_NAME AS buNames, payPinv.BU_ID AS buIds, payPinv.BD_NAME AS bdNames, payPinv.BD_ID AS bdIds, payPinv.PU_NAME AS puNames, payPinv.PU_ID AS puIds, purNo.nos AS psmNo, COALESCE ( invoiceNos.invoiceNos, '' ) AS invoiceNos FROM PAY_PINV payPinv LEFT JOIN BAS_CURR basCurr ON basCurr.CURR_ID = payPinv.CURR_ID AND basCurr.del_flag = FALSE LEFT JOIN purNo ON purNo.pinv_id = payPinv.pinv_id LEFT JOIN invoiceNos ON invoiceNos.pinv_id = payPinv.pinv_id WHERE payPinv.DEL_FLAG = FALSE AND ( payPinv.CRT_USER_ID ='f5785a75b1044364a08b50c934f05831' OR ( 1 = 1 AND ( 1 = 1 ) ) ) AND payPinv.BILL_TYPE_CODE = 'GINV ' AND to_char( '2025-03-08', 'yyyy-mm-dd' ) <= to_char( payPinv.CRT_TIME, 'yyyy-mm-dd' ) AND to_char( '2025-09-08', 'yyyy-mm-dd' ) >= to_char( payPinv.CRT_TIME, 'yyyy-mm-dd' ) AND ( CASE WHEN payPinv.TRADE_FLAG THEN '1' WHEN payPinv.TRADE_FLAG IS NULL THEN NULL ELSE'0' END ) IN ( '0' , '1' ) ORDER BY payPinv.CRT_TIME DESC > ERROR: relation "pay_ginv_row" does not exist LINE 11: pay_ginv_row

SQL优化以下语句(select f.file_name,a.content_id,c.fd_objectid level_id,c.level level_val,e.fd_objectid manage_id, ifnull((select count(fd_objectid) from message_receiver where MESSAGE_ID = e.fd_objectid), 0) SEND_PEOPLE_NUM, ifnull((select sum(case when reply_content is not null and reply_content != '' then 1 else 0 end) from message_receiver where MESSAGE_ID = e.fd_objectid), 0) reply_num, ifnull((select count(fd_objectid) from (select * from (select *,row_number() over(partition by seq,sendee_tel order by call_stat desc) flag from GROUPCALL_DETAILS) where flag = '1') where busi_id like concat('%', a.content_id) and busi_id like concat(a.event_id, '%')), 0) call_all, ifnull((select sum(case when call_stat like '%0%' then 1 else 0 end) from (select * from (select *,row_number() over(partition by seq,sendee_tel order by call_stat desc) flag from GROUPCALL_DETAILS) where flag = '1') where busi_id like concat('%', a.content_id) and busi_id like concat(a.event_id, '%')), 0) call_jt from NWYJ_SERVICE.ECM_EMYA_ORDER a left join MAP_EMEC_PLAN_CONTENT b on b.FD_OBJECTID = a.CONTENT_ID left join MAP_EMEC_PLAN c on c.FD_OBJECTID = b.RELATION_ID left join MAP_EMEC_ORG_RELATION d on d.FD_OBJECTID = b.ORG_RELATION_ID left join MESSAGE_MANAGE e on e.BUSI_ID = a.FD_OBJECTID left join MAP_EMEC_PLAN_ORG_TREE f on f.fd_objectid = d.org_id where a.event_id = #{eventId} and a.is_del = '0' and b.is_del = '0' and c.is_del = '0' and d.is_del = '0' and f.is_del = '0' and c.fd_objectid = #{levelId} and e.fd_objectid is not null)

WITH tmp17 as ( SELECT DISTINCT jk. * FROM m_number_of_information_category jk INNER JOIN m_pattern pt ON jk.pattern_type = pt.pattern_type AND jk.pattern_code = pt.pattern_code AND pt.version = $1 AND pt.original_store_code = $2 AND TO_DATE($3, 'YYYY-MM-DD') BETWEEN pt.apply_start_date AND pt.apply_end_date WHERE jk.version = $4 AND TO_DATE($5, 'YYYY-MM-DD') BETWEEN jk.apply_start_date AND jk.apply_end_date AND ( jk.license_code = '00' OR jk.license_code IN ( $6 , $7 , $8 , $9 , $10 , $11 , $12 , $13 , $14 , $15 , $16 , $17 , $18 , $19 , $20 , $21 , $22 , $23 , $24 , $25 ) ) AND jk.reading_item_quantity > 0 AND jk.specific_item_flag = '0' UNION SELECT DISTINCT jk. * FROM m_number_of_information_category jk INNER JOIN m_pattern pt ON jk.pattern_type = pt.pattern_type AND jk.pattern_code = pt.pattern_code AND pt.version = $26 AND pt.original_store_code = $27 AND TO_DATE($28, 'YYYY-MM-DD') BETWEEN pt.apply_start_date AND pt.apply_end_date INNER JOIN m_item sm ON jk.pattern_type = sm.pattern_type AND jk.pattern_code = sm.pattern_code AND jk.host_cycle_code = sm.host_cycle_code AND jk.store_cycle_code = sm.store_cycle_code AND jk.information_category_code = sm.information_category_code AND sm.version = $29 AND TO_DATE($30, 'YYYY-MM-DD') BETWEEN sm.apply_start_date AND sm.apply_end_date AND sm.specific_item_type IN ('1', 'G') INNER JOIN m_item_by_specific_store_recommendation sr ON pt.original_store_code = sr.original_store_code AND sm.item_code = sr.item_code AND sr.version = $31 AND TO_DATE($32, 'YYYY-MM-DD') BETWEEN sr.apply_start_date AND sr.apply_end_date WHERE jk.version = $33 AND TO_DATE($34, 'YYYY-MM-DD') BETWEEN jk.apply_start_date AND jk.apply_end_date AND ( jk.license_code = '00' OR jk.license_code IN ( $35 , $36 , $37 , $38 , $39 , $40 , $41 , $42 , $43 , $44 , $45 , $46 , $47 , $48 , $49 , $50 , $51 , $52 , $53 , $54 ) ) AND jk.reading_item_quantity > 0 AND jk.specific_item_flag = '1' ) , tmp3 as ( SELECT hg.host_cycle_code ,hg.store_cycle_code ,SUM(hg.reading_item_quantity) AS reading_item_quantity ,sc.store_cycle_name ,sc.cycle_display_order ,sc.order_method_type ,pt.original_store_code ,hg.pattern_type ,hg.pattern_code FROM m_number_of_order_group hg INNER JOIN m_pattern pt ON hg.pattern_type = pt.pattern_type AND hg.pattern_code = pt.pattern_code AND pt.version = $55 AND pt.original_store_code = $56 AND TO_DATE($57, 'YYYY-MM-DD') BETWEEN pt.apply_start_date AND pt.apply_end_date INNER JOIN m_cycle sc ON hg.host_cycle_code = sc.host_cycle_code AND hg.store_cycle_code = sc.store_cycle_code AND sc.version = $58 AND sc.order_method_type IN ('02','03','04','05','06','07','09','10') AND TO_DATE($59, 'YYYY-MM-DD') BETWEEN sc.apply_start_date AND sc.apply_end_date WHERE hg.version = $60 AND TO_DATE($61, 'YYYY-MM-DD') BETWEEN hg.apply_start_date AND hg.apply_end_date AND hg.specific_item_flag = '0' AND ( hg.license_code = '00' OR hg.license_code IN ( $62 , $63 , $64 , $65 , $66 , $67 , $68 , $69 , $70 , $71 , $72 , $73 , $74 , $75 , $76 , $77 , $78 , $79 , $80 , $81 ) ) GROUP BY hg.host_cycle_code , hg.store_cycle_code , sc.store_cycle_name , sc.cycle_display_order , sc.order_method_type , pt.original_store_code , hg.pattern_type , hg.pattern_code UNION SELECT hg.host_cycle_code, hg.store_cycle_code, SUM(hg.reading_item_quantity) AS reading_item_quantity, sc.store_cycle_name, sc.cycle_display_order, sc.order_method_type, pt.original_store_code, hg.pattern_type, hg.pattern_code FROM m_number_of_order_group hg INNER JOIN m_pattern pt ON hg.pattern_type = pt.pattern_type AND hg.pattern_code = pt.pattern_code AND pt.version = $82 AND pt.original_store_code = $83 AND TO_DATE($84, 'YYYY-MM-DD') BETWEEN pt.apply_start_date AND pt.apply_end_date INNER JOIN m_cycle sc ON hg.host_cycle_code = sc.host_cycle_code AND hg.store_cycle_code = sc.store_cycle_code AND sc.version = $85 AND sc.order_method_type IN ('02', '03', '04', '05', '06', '07', '09', '10') AND TO_DATE($86, 'YYYY-MM-DD') BETWEEN sc.apply_start_date AND sc.apply_end_date INNER JOIN m_item sm ON hg.pattern_type = sm.pattern_type AND hg.pattern_code = sm.pattern_code AND hg.host_cycle_code = sm.host_cycle_code AND hg.store_cycle_code = sm.store_cycle_code AND sm.version = $87 AND TO_DATE($88, 'YYYY-MM-DD') BETWEEN sm.apply_start_date AND sm.apply_end_date AND sm.specific_item_type IN ('1', 'G') INNER JOIN m_item_by_specific_store_recommendation sr ON pt.original_store_code = sr.original_store_code AND sm.item_code = sr.item_code AND sr.version = $89 AND TO_DATE($90, 'YYYY-MM-DD') BETWEEN sr.apply_start_date AND sr.apply_end_date WHERE hg.version = $91 AND TO_DATE($92, 'YYYY-MM-DD') BETWEEN hg.apply_start_date AND hg.apply_end_date AND hg.specific_item_flag = '1' AND ( hg.license_code = '00' OR hg.license_code IN ( $93 , $94 , $95 , $96 , $97 , $98 , $99 , $100 , $101 , $102 , $103 , $104 , $105 , $106 , $107 , $108 , $109 , $110 , $111 , $112 ) ) GROUP BY hg.host_cycle_code, hg.store_cycle_code, sc.store_cycle_name, sc.cycle_display_order, sc.order_method_type, pt.original_store_code, hg.pattern_type, hg.pattern_code ) , tmp4 as ( SELECT DISTINCT tmp3.host_cycle_code ,tmp3.store_cycle_code ,tmp3.store_cycle_name ,tmp3.cycle_display_order ,tmp3.order_method_type ,tmp3.original_store_code FROM tmp3 INNER JOIN m_order_schedule hs ON tmp3.pattern_type = hs.pattern_type AND tmp3.pattern_code = hs.pattern_code AND tmp3.host_cycle_code = hs.host_cycle_code AND tmp3.store_cycle_code = hs.store_cycle_code AND hs.version = $113 AND hs.order_date = TO_DATE($114, 'YYYY-MM-DD') LEFT OUTER JOIN m_delivery_type nk ON hs.host_cycle_code = nk.host_cycle_code AND hs.delivery_schedule_code = nk.delivery_schedule_code AND nk.version = $115 AND nk.original_store_code = $116 AND TO_DATE($117, 'YYYY-MM-DD') BETWEEN nk.apply_start_date AND nk.apply_end_date WHERE tmp3.reading_item_quantity > 0 AND (hs.delivery_schedule_code = '0' OR (hs.delivery_schedule_code != '0' AND nk.delivery_schedule_code IS NOT NULL)) ORDER BY tmp3.cycle_display_order ASC) , tmp5 as ( SELECT DISTINCT tmp4.original_store_code ,tmp4.host_cycle_code ,tmp4.store_cycle_code ,(CASE WHEN COALESCE(hk.setting_order_action_flag, '0') = '1' THEN '1' ELSE '0' END) AS setting_order_action_flag ,(CASE WHEN tmp4.order_method_type IN ('09','10') AND COALESCE(hk.daily_recommendation_quantity_of_stock_distribution_flag,'0') = '1' AND COALESCE(hk.daily_ai_order_action_flag,'0') = '1' THEN '1' WHEN tmp4.order_method_type IN ('04','05','06') AND COALESCE(hk.not_daily_ai_order_action_flag,'0') = '1' THEN '1' ELSE '0' END) AS ai_order_action_flag FROM tmp4 LEFT OUTER JOIN m_order_basic_setting hk ON tmp4.original_store_code = hk.original_store_code WHERE tmp4.order_method_type IN ('04','05','06','09','10')) , tmp6 as ( SELECT DISTINCT tmp4.host_cycle_code ,tmp4.store_cycle_code ,jt.information_category_code ,jm.information_category_name ,jt.staff_code ,MIN(COALESCE(ik.group_number, ip.group_number)) AS reading_number ,MIN(COALESCE(ik.setting_order, ip.setting_order)) AS setting_order FROM m_staff_by_information_order jt INNER JOIN tmp4 ON jt.original_store_code = tmp4.original_store_code AND jt.host_cycle_code = tmp4.host_cycle_code AND jt.store_cycle_code = tmp4.store_cycle_code LEFT OUTER JOIN m_information_category jm ON jm.version = $118 AND jt.information_category_code = jm.information_category_code AND TO_DATE($119, 'YYYY-MM-DD') BETWEEN jm.apply_start_date AND jm.apply_end_date INNER JOIN tmp17 jk ON tmp4.host_cycle_code = jk.host_cycle_code AND tmp4.store_cycle_code = jk.store_cycle_code AND jt.information_category_code = jk.information_category_code INNER JOIN m_reading_number_by_pattern ip ON ip.pattern_type = jk.pattern_type AND ip.pattern_code = jk.pattern_code AND jt.host_cycle_code = ip.host_cycle_code AND jt.store_cycle_code = ip.store_cycle_code AND jt.information_category_code = ip.information_category_code AND ip.version = $120 AND TO_DATE ($121, 'YYYY-MM-DD' ) BETWEEN ip.apply_start_date AND ip.apply_end_date LEFT OUTER JOIN m_reading_number_by_store ik ON jt.host_cycle_code = ik.host_cycle_code AND jt.store_cycle_code = ik.store_cycle_code AND jt.information_category_code = ik.information_category_code AND ik.original_store_code = $122 AND TO_DATE ($123, 'YYYY-MM-DD' ) BETWEEN ik.apply_start_date AND ik.apply_end_date GROUP BY tmp4.host_cycle_code, tmp4.store_cycle_code, jt.information_category_code, jm.information_category_name, jt.staff_code ) , tmp7 as ( SELECT tmp4.host_cycle_code ,tmp4.store_cycle_code ,st.information_category_code ,jm.information_category_name ,jm.information_category_display_order ,st.staff_code FROM m_staff_by_other_order st INNER JOIN tmp4 ON st.original_store_code = tmp4.original_store_code AND st.host_cycle_code = tmp4.host_cycle_code AND st.store_cycle_code = tmp4.store_cycle_code LEFT OUTER JOIN m_information_category jm ON jm.version = $124 AND st.information_category_code = jm.information_category_code AND TO_DATE($125, 'YYYY-MM-DD') BETWEEN jm.apply_start_date AND jm.apply_end_date INNER JOIN tmp17 jk ON tmp4.host_cycle_code = jk.host_cycle_code AND tmp4.store_cycle_code = jk.store_cycle_code AND st.information_category_code = jk.information_category_code ) , tmp8 as ( SELECT tmp4.host_cycle_code ,tmp4.store_cycle_code ,gt.gondola_number ,gm.information_category_code ,jm.information_category_name ,gt.staff_code FROM m_staff_by_gondola_order gt INNER JOIN m_number_of_gondola gm ON gt.original_store_code = gm.original_store_code AND gt.host_cycle_code = gm.host_cycle_code AND gt.store_cycle_code = gm.store_cycle_code AND gt.gondola_number = gm.gondola_number AND gm.version = $126 AND TO_DATE($127, 'YYYY-MM-DD') BETWEEN gm.apply_start_date AND gm.apply_end_date AND gm.reading_item_quantity > 0 INNER JOIN tmp4 ON gt.original_store_code = tmp4.original_store_code AND gt.host_cycle_code = tmp4.host_cycle_code AND gt.store_cycle_code = tmp4.store_cycle_code LEFT OUTER JOIN m_information_category jm ON jm.version = $128 AND gm.information_category_code = jm.information_category_code AND TO_DATE($129, 'YYYY-MM-DD') BETWEEN jm.apply_start_date AND jm.apply_end_date WHERE ( gm.license_code = '00' OR gm.license_code IN ( $130 , $131 , $132 , $133 , $134 , $135 , $136 , $137 , $138 , $139 , $140 , $141 , $142 , $143 , $144 , $145 , $146 , $147 , $148 , $149 ) ) ) , tmp9 as ( SELECT tmp8.host_cycle_code ,tmp8.store_cycle_code ,tmp8.gondola_number ,tmp8.information_category_code ,tmp8.staff_code ,tt.information_category_code AS display_input_information_category_code FROM tmp8 LEFT OUTER JOIN tmp6 ON tmp8.host_cycle_code = tmp6.host_cycle_code AND tmp8.store_cycle_code = tmp6.store_cycle_code AND tmp8.information_category_code = tmp6.information_category_code AND tmp8.staff_code = tmp6.staff_code LEFT OUTER JOIN m_specific_display_order tt ON tmp8.gondola_number = tt.display_gondola AND tmp8.information_category_code = tt.information_category_code AND tt.original_store_code = $150 WHERE tmp6.information_category_code IS NULL) , tmp10 as ( SELECT tmp6.host_cycle_code ,tmp6.store_cycle_code ,tmp6.information_category_code ,tmp6.staff_code FROM tmp6 UNION SELECT tmp7.host_cycle_code ,tmp7.store_cycle_code ,tmp7.information_category_code ,tmp7.staff_code FROM tmp7 UNION SELECT DISTINCT tmp9.host_cycle_code ,tmp9.store_cycle_code ,tmp9.information_category_code ,tmp9.staff_code FROM tmp9 WHERE tmp9.display_input_information_category_code IS NOT NULL) , tmp11 as( SELECT DISTINCT tmp9.host_cycle_code ,tmp9.store_cycle_code ,tmp9.staff_code ,tj.item_code FROM tmp9 INNER JOIN m_item sm ON tmp9.host_cycle_code = sm.host_cycle_code AND tmp9.store_cycle_code = sm.store_cycle_code AND tmp9.information_category_code = sm.information_category_code AND sm.version = $151 AND TO_DATE($152, 'YYYY-MM-DD') BETWEEN sm.apply_start_date AND sm.apply_end_date INNER JOIN m_pattern pt ON sm.pattern_type = pt.pattern_type AND sm.pattern_code = pt.pattern_code AND pt.version = $153 AND pt.original_store_code = $154 AND TO_DATE($155, 'YYYY-MM-DD') BETWEEN pt.apply_start_date AND pt.apply_end_date INNER JOIN m_display tj ON sm.item_code = tj.item_code AND tj.original_store_code = $156 AND tmp9.gondola_number = tj.display_gondola WHERE tmp9.display_input_information_category_code IS NULL) , tmp12 as( SELECT tmp10.host_cycle_code ,tmp10.store_cycle_code ,tmp10.staff_code ,SUM(hz1.input_packed_quantity) AS order_total_quantity ,SUM(hz1.input_amount) AS order_total_amount ,MAX(hz1.order_done_display_flag) AS order_situation FROM s_order hz1 INNER JOIN tmp10 ON hz1.host_cycle_code = tmp10.host_cycle_code AND hz1.store_cycle_code = tmp10.store_cycle_code AND hz1.information_category_code = tmp10.information_category_code AND hz1.original_store_code = '181013' AND hz1.order_date = TO_DATE($157, 'YYYY-MM-DD') GROUP BY tmp10.host_cycle_code, tmp10.store_cycle_code, tmp10.staff_code) , tmp13 as ( SELECT tmp11.host_cycle_code ,tmp11.store_cycle_code ,tmp11.staff_code ,SUM(hz2.input_packed_quantity) AS order_total_quantity ,SUM(hz2.input_amount) AS order_total_amount ,MAX(hz2.order_done_display_flag) AS order_situation FROM s_order hz2 INNER JOIN tmp11 ON hz2.item_code = tmp11.item_code AND hz2.original_store_code = '181013' AND hz2.order_date = TO_DATE($158, 'YYYY-MM-DD') GROUP BY tmp11.host_cycle_code, tmp11.store_cycle_code, tmp11.staff_code) , tmp18 as ( SELECT tmp6.host_cycle_code ,tmp6.store_cycle_code ,tmp6.information_category_code ,tmp6.staff_code FROM tmp6 UNION SELECT tmp7.host_cycle_code ,tmp7.store_cycle_code ,tmp7.information_category_code ,tmp7.staff_code FROM tmp7 UNION SELECT DISTINCT tmp9.host_cycle_code ,tmp9.store_cycle_code ,tmp9.information_category_code ,tmp9.staff_code FROM tmp9) , tmp14 as ( SELECT DISTINCT tmp4.host_cycle_code ,tmp4.store_cycle_code FROM tmp4 WHERE NOT EXISTS (SELECT 1 FROM tmp18 WHERE tmp18.host_cycle_code = tmp4.host_cycle_code AND tmp18.store_cycle_code = tmp4.store_cycle_code)) , tmp15 as ( SELECT tmp14.host_cycle_code ,tmp14.store_cycle_code ,NULL AS staff_code ,SUM(hz3.input_packed_quantity) AS order_total_quantity ,SUM(hz3.input_amount) AS order_total_amount ,MAX(hz3.order_done_display_flag) AS order_situation FROM s_order hz3 INNER JOIN tmp14 ON hz3.host_cycle_code = tmp14.host_cycle_code AND hz3.store_cycle_code = tmp14.store_cycle_code AND hz3.original_store_code = '181013' AND hz3.order_date = TO_DATE($159, 'YYYY-MM-DD') GROUP BY tmp14.host_cycle_code,tmp14.store_cycle_code) , tmp16 as ( SELECT tmp16_tmp.host_cycle_code , tmp16_tmp.store_cycle_code , tmp16_tmp.staff_code , SUM(tmp16_tmp.order_total_quantity) as order_total_quantity , SUM(tmp16_tmp.order_total_amount) as order_total_amount , MAX(tmp16_tmp.order_situation) as order_situation FROM ( SELECT tmp12.host_cycle_code , tmp12.store_cycle_code , tmp12.staff_code , tmp12.order_total_quantity , tmp12.order_total_amount , tmp12.order_situation FROM tmp12 UNION SELECT tmp13.host_cycle_code , tmp13.store_cycle_code , tmp13.staff_code , tmp13.order_total_quantity , tmp13.order_total_amount , tmp13.order_situation FROM tmp13 UNION SELECT tmp15.host_cycle_code , tmp15.store_cycle_code , tmp15.staff_code , tmp15.order_total_quantity , tmp15.order_total_amount , tmp15.order_situation FROM tmp15 ) AS tmp16_tmp GROUP BY tmp16_tmp.host_cycle_code , tmp16_tmp.store_cycle_code , tmp16_tmp.staff_code ) SELECT DISTINCT tmp18.staff_code AS order_staff_code ,tmp4.store_cycle_name AS order_group_name ,tmp4.host_cycle_code ,tmp4.store_cycle_code ,COALESCE(tmp16.order_situation, '0') AS order_situation ,COALESCE(tmp16.order_total_quantity, 0) AS order_total_quantity ,COALESCE(tmp16.order_total_amount, 0) AS order_total_amount ,(CASE WHEN rz.order_way = '1' AND tmp5.setting_order_action_flag = '1' THEN '1' WHEN rz.order_way = '2' AND tmp5.ai_order_action_flag = '1' THEN '2' ELSE '0' END ) AS order_way_first ,('1' || COALESCE(tmp5.setting_order_action_flag, '0') || COALESCE(tmp5.ai_order_action_flag, '0')) AS selection_permission_order_way ,CASE WHEN tmp4.order_method_type = '07' THEN '0' ELSE COALESCE(rz.displayorder, '0') END AS sort_method_first ,('1' || '1' || '1') AS selection_permission_sort_method ,(CASE WHEN rz.reading_method IS NOT NULL AND rz.reading_method = '0' AND ici_tmp.information_category_code_information_list IS NOT NULL THEN '0' WHEN rz.reading_method IS NOT NULL AND rz.reading_method = '1' AND icg_tmp.gondola_number_list IS NOT NULL THEN '1' WHEN yt.reading_method IS NOT NULL THEN (CASE WHEN yt.reading_method = '1' THEN '0' WHEN yt.reading_method = '2' THEN '1' END) WHEN ici_tmp.information_category_code_information_list IS NOT NULL AND icg_tmp.gondola_number_list IS NULL THEN '0' WHEN ici_tmp.information_category_code_information_list IS NULL AND icg_tmp.gondola_number_list IS NOT NULL THEN '1' WHEN tmp4.order_method_type IN ('04', '05', '06', '09') THEN '1' ELSE '0' END) AS reading_method_first ,('1') || (CASE WHEN tmp4.order_method_type IN ('04', '05', '06', '09') THEN '1' ELSE '0' END) AS selection_permission_reading_method ,ici_tmp.information_category_code_information_list ,ici_tmp.information_category_name_information_list ,ici_tmp.reading_number_information_list ,ici_tmp.setting_order_information_list ,icg_tmp.information_category_code_gondola_list ,icg_tmp.information_category_name_gondola_list ,icg_tmp.information_category_display_order_list ,icg_tmp.gondola_number_list ,icg_tmp.other_information_category_flag_list ,icg_tmp.unregistered_information_category_flag_list ,tmp4.order_method_type ,tmp4.cycle_display_order FROM tmp4 LEFT OUTER JOIN tmp18 ON tmp18.host_cycle_code = tmp4.host_cycle_code AND tmp18.store_cycle_code = tmp4.store_cycle_code LEFT OUTER JOIN m_staff_by_reading_method yt ON tmp4.host_cycle_code = yt.host_cycle_code AND tmp4.store_cycle_code = yt.store_cycle_code AND yt.original_store_code = $160 AND yt.staff_code = tmp18.staff_code LEFT OUTER JOIN tmp16 ON tmp4.host_cycle_code = tmp16.host_cycle_code AND tmp4.store_cycle_code = tmp16.store_cycle_code AND (CASE WHEN tmp16.staff_code IS NULL THEN tmp18.staff_code IS NULL ELSE tmp18.staff_code = tmp16.staff_code END ) LEFT OUTER JOIN s_cycle_select_history rz ON tmp4.host_cycle_code = rz.host_cycle_code AND tmp4.store_cycle_code = rz.store_cycle_code AND ( CASE WHEN rz.staff_code = '0000000000000' THEN tmp18.staff_code IS NULL ELSE tmp18.staff_code = rz.staff_code END ) AND rz.original_store_code = $161 AND rz.login_employee_code = $162 LEFT OUTER JOIN tmp5 ON tmp4.host_cycle_code = tmp5.host_cycle_code AND tmp4.store_cycle_code = tmp5.store_cycle_code AND tmp5.original_store_code = $163 LEFT OUTER JOIN ( SELECT ici.host_cycle_code , ici.store_cycle_code , array_agg(ici.information_category_code) AS information_category_code_information_list , array_agg(ici.information_category_name) AS information_category_name_information_list , array_agg(ici.reading_number) AS reading_number_information_list , array_agg(ici.setting_order) AS setting_order_information_list , ici.staff_code FROM ( SELECT tmp6.host_cycle_code , tmp6.store_cycle_code , tmp6.information_category_code , tmp6.information_category_name , tmp6.staff_code , tmp6.reading_number AS reading_number , tmp6.setting_order AS setting_order FROM tmp6 UNION SELECT DISTINCT jk.host_cycle_code , jk.store_cycle_code , jk.information_category_code , jm.information_category_name , t6_tmp.staff_code , MIN(COALESCE(ik.group_number, ip.group_number)) AS reading_number , MIN(COALESCE(ik.setting_order, ip.setting_order)) AS setting_order FROM tmp17 jk LEFT OUTER JOIN m_staff_by_information_order jt ON jk.host_cycle_code = jt.host_cycle_code AND jk.store_cycle_code = jt.store_cycle_code AND jk.information_category_code = jt.information_category_code AND jt.original_store_code = $164 LEFT OUTER JOIN m_information_category jm ON jm.version = $165 AND jk.information_category_code = jm.information_category_code AND TO_DATE($166, 'YYYY-MM-DD') BETWEEN jm.apply_start_date AND jm.apply_end_date LEFT OUTER JOIN ( SELECT DISTINCT tmp6.host_cycle_code , tmp6.store_cycle_code , tmp6.staff_code FROM tmp6) t6_tmp ON jk.host_cycle_code = t6_tmp.host_cycle_code AND jk.store_cycle_code = t6_tmp.store_cycle_code INNER JOIN m_reading_number_by_pattern ip ON ip.pattern_type = jk.pattern_type AND ip.pattern_code = jk.pattern_code AND jk.host_cycle_code = ip.host_cycle_code AND jk.store_cycle_code = ip.store_cycle_code AND jk.information_category_code = ip.information_category_code AND ip.version = $167 AND TO_DATE($168, 'YYYY-MM-DD') BETWEEN ip.apply_start_date AND ip.apply_end_date LEFT OUTER JOIN m_reading_number_by_store ik ON jk.host_cycle_code = ik.host_cycle_code AND jk.store_cycle_code = ik.store_cycle_code AND jk.information_category_code = ik.information_category_code AND ik.original_store_code = $169 AND TO_DATE($170, 'YYYY-MM-DD') BETWEEN ik.apply_start_date AND ik.apply_end_date WHERE jt.information_category_code IS NULL GROUP BY jk.host_cycle_code, jk.store_cycle_code, jk.information_category_code, jm.information_category_name, t6_tmp.staff_code UNION SELECT DISTINCT jk.host_cycle_code, jk.store_cycle_code, jk.information_category_code, jm.information_category_name, tmp18.staff_code, MIN(COALESCE(ik.group_number, ip.group_number)) AS reading_number, MIN(COALESCE(ik.setting_order, ip.setting_order)) AS setting_order FROM tmp17 jk INNER JOIN tmp18 ON tmp18.host_cycle_code = jk.host_cycle_code AND tmp18.store_cycle_code = jk.store_cycle_code LEFT OUTER JOIN m_information_category jm ON jm.version = $171 AND jk.information_category_code = jm.information_category_code AND TO_DATE($172, 'YYYY-MM-DD') BETWEEN jm.apply_start_date AND jm.apply_end_date INNER JOIN m_reading_number_by_pattern ip ON ip.pattern_type = jk.pattern_type AND ip.pattern_code = jk.pattern_code AND jk.host_cycle_code = ip.host_cycle_code AND jk.store_cycle_code = ip.store_cycle_code AND jk.information_category_code = ip.information_category_code AND ip.version = $173 AND TO_DATE($174, 'YYYY-MM-DD') BETWEEN ip.apply_start_date AND ip.apply_end_date LEFT OUTER JOIN m_reading_number_by_store ik ON jk.host_cycle_code = ik.host_cycle_code AND jk.store_cycle_code = ik.store_cycle_code AND jk.information_category_code = ik.information_category_code AND ik.original_store_code = $175 AND TO_DATE($176, 'YYYY-MM-DD') BETWEEN ik.apply_start_date AND ik.apply_end_date LEFT OUTER JOIN m_staff_by_information_order jt ON jt.original_store_code = $177 AND jt.host_cycle_code = jk.host_cycle_code AND jt.store_cycle_code = jk.store_cycle_code AND jt.information_category_code = jk.information_category_code WHERE jt.staff_code IS NULL GROUP BY jk.host_cycle_code, jk.store_cycle_code, jk.information_category_code, jm.information_category_name, tmp18.staff_code ) ici GROUP BY ici.host_cycle_code , ici.store_cycle_code , ici.staff_code ) ici_tmp ON tmp4.host_cycle_code = ici_tmp.host_cycle_code AND tmp4.store_cycle_code = ici_tmp.store_cycle_code AND ( tmp18.staff_code = ici_tmp.staff_code OR (tmp18.staff_code IS NULL AND ici_tmp.staff_code IS NULL) ) LEFT OUTER JOIN ( SELECT icg.host_cycle_code , icg.store_cycle_code , array_agg(icg.information_category_code) AS information_category_code_gondola_list , array_agg(icg.information_category_name) AS information_category_name_gondola_list , icg.staff_code , array_agg(icg.information_category_display_order) AS information_category_display_order_list , array_agg(icg.gondola_number) AS gondola_number_list , array_agg(icg.other_information_category_flag) AS other_information_category_flag_list , array_agg(icg.unregistered_information_category_flag) AS unregistered_information_category_flag_list FROM ( SELECT tmp8.host_cycle_code , tmp8.store_cycle_code , tmp8.information_category_code , tmp8.information_category_name , 0 AS information_category_display_order , tmp8.staff_code , tmp8.gondola_number AS gondola_number , '0' AS other_information_category_flag , '0' AS unregistered_information_category_flag FROM tmp8 UNION SELECT tmp7.host_cycle_code , tmp7.store_cycle_code , tmp7.information_category_code , tmp7.information_category_name , tmp7.information_category_display_order AS information_category_display_order , tmp7.staff_code , 0 AS gondola_number , '1' AS other_information_category_flag , CASE WHEN gk.information_category_code IS NULL THEN '1' ELSE '0' END AS unregistered_information_category_flag FROM tmp7 LEFT OUTER JOIN m_number_of_gondola gk ON gk.version = $178 AND gk.original_store_code = $179 AND TO_DATE($180, 'YYYY-MM-DD') BETWEEN gk.apply_start_date AND gk.apply_end_date AND tmp7.host_cycle_code = gk.host_cycle_code AND tmp7.store_cycle_code = gk.store_cycle_code AND tmp7.information_category_code = gk.information_category_code AND ( gk.license_code = '00' OR gk.license_code IN ( $181 , $182 , $183 , $184 , $185 , $186 , $187 , $188 , $189 , $190 , $191 , $192 , $193 , $194 , $195 , $196 , $197 , $198 , $199 , $200 ) ) AND gk.reading_item_quantity > 0 UNION SELECT DISTINCT gk.host_cycle_code , gk.store_cycle_code , gk.information_category_code , jm.information_category_name , jm.information_category_display_order AS information_category_display_order , t7_t8_tmp1.staff_code , gk.gondola_number AS gondola_number , '0' AS other_information_category_flag , '0' AS unregistered_information_category_flag FROM m_number_of_gondola gk LEFT OUTER JOIN m_staff_by_gondola_order gt ON gk.host_cycle_code = gt.host_cycle_code AND gk.store_cycle_code = gt.store_cycle_code AND gk.gondola_number = gt.gondola_number AND gt.original_store_code = $201 LEFT OUTER JOIN m_staff_by_other_order st ON gk.host_cycle_code = st.host_cycle_code AND gk.store_cycle_code = st.store_cycle_code AND gk.information_category_code = st.information_category_code AND st.original_store_code = $202 LEFT OUTER JOIN m_information_category jm ON jm.version = $203 AND gk.information_category_code = jm.information_category_code AND TO_DATE($204, 'YYYY-MM-DD') BETWEEN jm.apply_start_date AND jm.apply_end_date LEFT OUTER JOIN ( SELECT DISTINCT tmp7.host_cycle_code , tmp7.store_cycle_code , tmp7.staff_code FROM tmp7 UNION SELECT DISTINCT tmp8.host_cycle_code , tmp8.store_cycle_code , tmp8.staff_code FROM tmp8 ) t7_t8_tmp1 ON gk.host_cycle_code = t7_t8_tmp1.host_cycle_code AND gk.store_cycle_code = t7_t8_tmp1.store_cycle_code WHERE gk.version = $205 AND gk.original_store_code = $206 AND TO_DATE($207, 'YYYY-MM-DD') BETWEEN gk.apply_start_date AND gk.apply_end_date AND ( gk.license_code = '00' OR gk.license_code IN ( $208 , $209 , $210 , $211 , $212 , $213 , $214 , $215 , $216 , $217 , $218 , $219 , $220 , $221 , $222 , $223 , $224 , $225 , $226 , $227 ) ) AND gk.reading_item_quantity > 0 AND gt.gondola_number IS NULL AND st.information_category_code IS NULL UNION SELECT DISTINCT jk.host_cycle_code , jk.store_cycle_code , jk.information_category_code , jm.information_category_name , jm.information_category_display_order AS information_category_display_order , t7_t8_tmp2.staff_code , 0 AS gondola_number , '0' AS other_information_category_flag , '1' AS unregistered_information_category_flag FROM tmp17 jk LEFT OUTER JOIN m_number_of_gondola gk ON jk.host_cycle_code = gk.host_cycle_code AND jk.store_cycle_code = gk.store_cycle_code AND jk.information_category_code = gk.information_category_code AND gk.version = $228 AND gk.original_store_code = $229 AND TO_DATE($230, 'YYYY-MM-DD') BETWEEN gk.apply_start_date AND gk.apply_end_date AND ( gk.license_code = '00' OR gk.license_code IN ( $231 , $232 , $233 , $234 , $235 , $236 , $237 , $238 , $239 , $240 , $241 , $242 , $243 , $244 , $245 , $246 , $247 , $248 , $249 , $250 ) ) AND gk.reading_item_quantity > 0 LEFT OUTER JOIN m_staff_by_other_order st ON jk.host_cycle_code = st.host_cycle_code AND jk.store_cycle_code = st.store_cycle_code AND jk.information_category_code = st.information_category_code AND st.original_store_code = $251 LEFT OUTER JOIN m_information_category jm ON jm.version = $252 AND jk.information_category_code = jm.information_category_code AND TO_DATE($253, 'YYYY-MM-DD') BETWEEN jm.apply_start_date AND jm.apply_end_date LEFT OUTER JOIN ( SELECT DISTINCT tmp7.host_cycle_code , tmp7.store_cycle_code , tmp7.staff_code FROM tmp7 UNION SELECT DISTINCT tmp8.host_cycle_code , tmp8.store_cycle_code , tmp8.staff_code FROM tmp8) t7_t8_tmp2 ON jk.host_cycle_code = t7_t8_tmp2.host_cycle_code AND jk.store_cycle_code = t7_t8_tmp2.store_cycle_code WHERE gk.information_category_code IS NULL AND st.information_category_code IS NULL UNION SELECT DISTINCT gk.host_cycle_code, gk.store_cycle_code, gk.information_category_code, jm.information_category_name, jm.information_category_display_order, tmp18.staff_code, gk.gondola_number, '0' AS other_information_category_flag, '0' AS unregistered_information_category_flag FROM m_number_of_gondola gk INNER JOIN tmp18 ON tmp18.host_cycle_code = gk.host_cycle_code AND tmp18.store_cycle_code = gk.store_cycle_code LEFT OUTER JOIN m_staff_by_gondola_order gt ON gk.host_cycle_code = gt.host_cycle_code AND gk.store_cycle_code = gt.store_cycle_code AND gk.gondola_number = gt.gondola_number AND gt.original_store_code = $254 LEFT OUTER JOIN m_staff_by_other_order st ON gk.host_cycle_code = st.host_cycle_code AND gk.store_cycle_code = st.store_cycle_code AND gk.information_category_code = st.information_category_code AND st.original_store_code = $255 LEFT OUTER JOIN m_information_category jm ON jm.version = $256 AND gk.information_category_code = jm.information_category_code AND TO_DATE($257, 'YYYY-MM-DD') BETWEEN jm.apply_start_date AND jm.apply_end_date WHERE gk.version = $258 AND gk.original_store_code = $259 AND TO_DATE($260, 'YYYY-MM-DD') BETWEEN gk.apply_start_date AND gk.apply_end_date AND ( gk.license_code = '00' OR gk.license_code IN ( $261 , $262 , $263 , $264 , $265 , $266 , $267 , $268 , $269 , $270 , $271 , $272 , $273 , $274 , $275 , $276 , $277 , $278 , $279 , $280 ) ) AND gk.reading_item_quantity > 0 AND gt.gondola_number IS NULL AND st.information_category_code IS NULL UNION SELECT DISTINCT jk.host_cycle_code, jk.store_cycle_code, jk.information_category_code, jm.information_category_name, jm.information_category_display_order, tmp18.staff_code, 0 AS gondola_number, '0' AS other_information_category_flag, '1' AS unregistered_information_category_flag FROM tmp17 jk INNER JOIN tmp18 ON tmp18.host_cycle_code = jk.host_cycle_code AND tmp18.store_cycle_code = jk.store_cycle_code LEFT OUTER JOIN m_number_of_gondola gk ON jk.host_cycle_code = gk.host_cycle_code AND jk.store_cycle_code = gk.store_cycle_code AND jk.information_category_code = gk.information_category_code AND gk.version = $281 AND gk.original_store_code = $282 AND TO_DATE($283, 'YYYY-MM-DD') BETWEEN gk.apply_start_date AND gk.apply_end_date AND ( gk.license_code = '00' OR gk.license_code IN ( $284 , $285 , $286 , $287 , $288 , $289 , $290 , $291 , $292 , $293 , $294 , $295 , $296 , $297 , $298 , $299 , $300 , $301 , $302 , $303 ) ) AND gk.reading_item_quantity > 0 LEFT OUTER JOIN m_staff_by_other_order st ON jk.host_cycle_code = st.host_cycle_code AND jk.store_cycle_code = st.store_cycle_code AND jk.information_category_code = st.information_category_code AND st.original_store_code = $304 LEFT OUTER JOIN m_information_category jm ON jm.version = $305 AND jk.information_category_code = jm.information_category_code AND TO_DATE($306, 'YYYY-MM-DD') BETWEEN jm.apply_start_date AND jm.apply_end_date WHERE gk.information_category_code IS NULL AND st.information_category_code IS NULL ) icg GROUP BY icg.host_cycle_code , icg.store_cycle_code , icg.staff_code ) icg_tmp ON tmp4.host_cycle_code = icg_tmp.host_cycle_code AND tmp4.store_cycle_code = icg_tmp.store_cycle_code AND tmp4.order_method_type IN ('04', '05', '06', '09') AND ( tmp18.staff_code = icg_tmp.staff_code OR (tmp18.staff_code IS NULL AND icg_tmp.staff_code IS NULL) ) ORDER BY tmp18.staff_code ASC, tmp4.cycle_display_order ASC 分步进行SQL优化,我想每一步确认一下效果

分析一下存储过程:CREATE OR REPLACE PROCEDURE dws.di_site_fee_detail_union(sdate date) LANGUAGE plpgsql AS $procedure$ DECLARE -- 变量声明; exception_MESSAGE_TEXT text; exception_RETURNED_SQLSTATE text; system_time timestamp = now(); begin delete from dws.dwd_site_fee_detail_union a where exists ( select 1 from ( select distinct year_month, '自有' as site_type from dws.dwd_site_self_fee_detail where 1=1 and ( create_time >= date_trunc('day', sdate) - interval '10 day' or update_time >= date_trunc('day', sdate) - interval '10 day' ) union select distinct year_month, '外租' as site_type from dws.dwd_site_rent_fee_detail where 1=1 and ( create_time >= date_trunc('day', sdate) - interval '10 day' or update_time >= date_trunc('day', sdate) - interval '10 day' ) )b where a.year_month = b.year_month and a.site_type = b.site_type ); with site_self_fee_temp as ( select "id", year_month, to_char(year_month, 'yyyy-MM-dd') as year_month_char, "area", park, factory_name, resource_floor, "floor", cost_center, unit_price, total_price, cost_calculate_area, use_status, create_time, update_time from dws.dwd_site_self_fee_detail where is_delete = '0' and year_month in ( select distinct year_month from dws.dwd_site_self_fee_detail where 1=1 and ( create_time >= date_trunc('day', sdate) - interval '10 day' or update_time >= date_trunc('day', sdate) - interval '10 day' ) ) ), site_rent_fee_temp as ( select "id", year_month, factory_code, base, park, factory_name, plant_name, resource_floor, "floor", total_area, total_rental, status, create_time, update_time from dws.dwd_site_rent_fee_detail where is_delete = '0' and year_month in ( select distinct year_month from dws.dwd_site_rent_fee_detail where 1=1 and ( create_time >= date_trunc('day', sdate) - interval '10 day' or update_time >= date_trunc('day', sdate) - interval '10 day' ) ) ), site_fee_union as ( select a."id", a.year_month, a."area" as base, a.park, c.region, c."area", c.general_factory, c.factory_id, a.factory_name as plant_name, a.resource_floor, a."floor", a.cost_center, '自有' as site_type, -- a.unit_price, a.total_price, a.cost_calculate_area, a.use_status, a.create_time, a.update_time from site_self_fee_temp a left join ods_sap.cost_center_source b on a.cost_center = b.cost_center left join dws.dwd_org_relation c on b.profit_center = c.profit_center where a.year_month_char between b.valid_from_date and b.valid_to_date union all select a."id", a.year_month, a.base, a.park, b.region, b."area", b.general_factory, a.factory_code, a.plant_name, a.resource_floor, a."floor", null::varchar(24) as cost_center, '外租' as site_type, a.total_rental, a.total_area, a.status, a.create_time, a.update_time from site_rent_fee_temp a left join dws.dwd_org_relation b on a.factory_code = b.profit_center ) insert into dws.dwd_site_fee_detail_union ("id",year_month,base,park,region,"area",general_factory,factory_id,plant_name,resource_floor,"floor", cost_center,site_type,total_price,cost_calculate_area,status,create_time,update_time) select "id", year_month, base, park, region, "area", general_factory, factory_id, plant_name, resource_floor, "floor", cost_center, site_type, total_price, cost_calculate_area, use_status, create_time, update_time from site_fee_union ; insert into dws.execute_procedure_exception (procedure_name,returned_sqlstate,create_time) values ('dws.di_site_fee_detail_union', 'ok',now()); -- 3.异常处理部分 exception when others then GET STACKED DIAGNOSTICS exception_RETURNED_SQLSTATE = RETURNED_SQLSTATE, exception_MESSAGE_TEXT = MESSAGE_TEXT; insert into dws.execute_procedure_exception (procedure_name,message_text,returned_sqlstate,create_time) values ('dws.di_site_fee_detail_union', exception_MESSAGE_TEXT,exception_RETURNED_SQLSTATE,now()); end; $procedure$ ;

SELECT t.DOCTOR_CODE AS doctorCode, t.DOCTOR_NAME_EN AS doctorNameEn, t.DOCTOR_NAME_CH AS doctorNameCh, spec.subSpecialtyInterestEn, spec.subSpecialtyInterestCh, prov.providerCode, net.networkType, MAX(t.REGION) AS region, CASE WHEN t3.NETWORK_TERMINATION_DATE IS NULL AND t3.NETWORK_CREATION_DATE IS NOT NULL THEN CASE WHEN GETDATE() >= t3.NETWORK_CREATION_DATE THEN 'Y' ELSE 'N' END WHEN t3.NETWORK_CREATION_DATE IS NOT NULL AND t3.NETWORK_TERMINATION_DATE IS NOT NULL THEN CASE WHEN GETDATE() BETWEEN t3.NETWORK_CREATION_DATE AND t3.NETWORK_TERMINATION_DATE THEN 'Y' ELSE 'N' END WHEN t3.NETWORK_CREATION_DATE IS NOT NULL THEN CASE WHEN GETDATE() < t3.NETWORK_TERMINATION_DATE THEN 'N' ELSE 'Y' END ELSE 'N' END AS activeAxaNetwork FROM T_DOCTOR_PROFILE t OUTER APPLY ( SELECT STRING_AGG(SUB_SPECIALTY_INTEREST_EN, ', ') WITHIN GROUP (order by SUB_SPECIALTY_INTEREST_EN), STRING_AGG(SUB_SPECIALTY_INTEREST_CH, ', ') within group ( order by SUB_SPECIALTY_INTEREST_CH ) FROM ( SELECT DISTINCT t2.SUB_SPECIALTY_INTEREST_EN, t2.SUB_SPECIALTY_INTEREST_CH FROM T_DOCTOR_SPECIALTY_INFORMATION t2 WHERE t2.DOCTOR_CODE = t.DOCTOR_CODE AND t2.deleted_flag = '0' ) AS specs ) spec(subSpecialtyInterestEn, subSpecialtyInterestCh) OUTER APPLY ( SELECT STRING_AGG(PROVIDER_CODE, '; ') FROM ( SELECT DISTINCT t3.PROVIDER_CODE FROM T_NETWORK_DOCTOR_PROVIDER_RELATION t3 WHERE t3.DOCTOR_CODE = t.DOCTOR_CODE AND t3.deleted_flag = '0' ) AS provs ) prov(providerCode) OUTER APPLY ( SELECT STRING_AGG(SERVICE_AREA, ', ') FROM ( SELECT DISTINCT t4.SERVICE_AREA FROM T_NETWORK_DOCTOR_PROVIDER_RELATION t3 JOIN T_NETWORK_DOCTOR_PROVIDER t4 ON t3.NETWORK_CODE = t4.NETWORK_CODE WHERE t3.DOCTOR_CODE = t.DOCTOR_CODE AND t3.deleted_flag = '0' AND t4.deleted_flag = '0' ) AS nets ) net(networkType) LEFT JOIN T_NETWORK_DOCTOR_PROVIDER_RELATION t3 ON t3.DOCTOR_CODE = t.DOCTOR_CODE AND t3.deleted_flag = '0' WHERE t.deleted_flag = '0' and t.DOCTOR_CODE = 'DOC001' GROUP BY t.id , t.DOCTOR_CODE, t.DOCTOR_NAME_EN, t.DOCTOR_NAME_CH, spec.subSpecialtyInterestEn, spec.subSpecialtyInterestCh, prov.providerCode, net.networkType, t3.NETWORK_TERMINATION_DATE, t3.NETWORK_CREATION_DATE order by t.id; -- ) -- AS subquery -- WHERE subquery.activeAxaNetwork = 'Y'; 我使用的Sqlserver 数据库版本是2017以上这个sql为什么不能执行

优化全表扫描 AC_PAYMENT_ACCOUNT 根本原因:缺少有效过滤条件或索引支持。 解决方案: 优化高开销索引扫描 TR_TRADE_BUSINESS_IX6 根本原因:索引选择率低(返回60K行),回表代价高。 解决方案: 3. 优化嵌套循环连接(NESTED LOOPS OUTER) 根本原因:多次嵌套循环(出现6层)导致复杂度激增。 解决方案: SELECT (‘01’ || tc.trade_confirm_id) AS rs_id, tc.workday AS workday, NULL AS subcenter, ta.name AS trade_account_name, tc.trade_account_no AS trade_account_no, tc.trust_channel_id AS trust_channel_id, tc.ta_account_no AS ta_account_no, tc.fund_code AS fund_code, tc.confirm_amount AS amount, ‘01’ AS accrual_id, NULL AS investor_bank_code, NULL AS investor_bank_acco_name, NULL AS investor_bank_acco_bank_branch, NULL AS investor_bank_acco_no, (CASE WHEN cr.capital_channel_id = ‘5’ THEN SUBSTR(v.bis_serial_no, 7) WHEN cr.capital_channel_id = ‘2’ THEN SUBSTR(v.bis_serial_no, 6) ELSE v.bis_serial_no END) AS request_serial_no, ‘156’ AS currency, tr.station_id AS station_id, (CASE WHEN tr.business_type = ‘T422’ THEN (CASE (SELECT pd.type FROM pd_fund pd WHERE pd.fund_code = tr.target_fund_code) WHEN ‘10’ THEN NVL(tc.return_channel_id, ‘8’) ELSE ‘y’ END) WHEN tc.return_channel_id in (‘7a’, ‘8a’) THEN NVL(tb.return_channel_id, pc.pay_channel_id) ELSE NVL(tc.return_channel_id, pc.pay_channel_id) END) AS ccs_capital_method, ca.bank_branch_code AS bank_firm_no, NULL AS seller_account_id, v.business_time AS business_time, (SELECT t.target_value FROM fw_map t WHERE t.map_group = ‘CUSTOMER_TYPE_OTS_CCS’ AND t.source_value = ta.customer_type_id) AS customer_type_id, NULL AS business_aided_code, NULL AS remit_status, v.bank_serial_no AS opposite_serial_no, tc.target_fund_code AS opposite_fund_code, NULL AS source_request_capital_method, tc.confirm_no AS keep_field, TO_DATE(‘2025-09-03’, ‘YYYY-MM-DD’) AS exec_workday, tc.confirm_no AS ta_confirm_no, NULL AS IS_TRANSFERED, NULL AS CCS_ACCOUNT_ID, NULL AS TRADE_BUSINESS_TIME, TC.TA_CODE AS TA_CODE, NULL AS ta_confirm_code, TO_CHAR(tc.buy_transfer_date, ‘yyyyMMdd’) AS loan_date, ‘02’ AS batch_no, tc.trade_request_id AS application_sheet_id, (CASE WHEN tr.business_type = ‘TI22’ THEN tr.source_request_id ELSE tr.trade_request_id END) AS request_group_id FROM (SELECT TTB.TRADE_BUSINESS_ID TRADE_CONFIRM_ID, ‘T’ || TTB.BUSINESS_TYPE BUSINESS_TYPE, TTB.TRADE_REQUEST_ID TRADE_REQUEST_ID, TTB.CONFIRM_NO CONFIRM_NO, TTB.TA_ACCOUNT_NO TA_ACCOUNT_NO, TTB.TRADE_ACCOUNT_NO TRADE_ACCOUNT_NO, TTB.TRUST_CHANNEL_ID TRUST_CHANNEL_ID, TTB.PAYMENT_CHANNEL_ID, TTB.FUND_CODE FUND_CODE, TTB.CONFIRM_STATE CONFIRM_STATE, TTB.APPLICATION_AMOUNT APPLICATION_AMOUNT, TTB.CONFIRM_AMOUNT CONFIRM_AMOUNT, TTB.CONFIRM_INTEREST CONFIRM_INTEREST, TTB.TRANSFER_AMOUNT, TTB.WORKDAY WORKDAY, TTB.RETURN_CHANNEL_ID RETURN_CHANNEL_ID, TTB.RETURN_CHANNEL_ACCOUNT_NO RETURN_CHANNEL_ACCOUNT_NO, TTB.TA_CODE TA_CODE, TTB.REDEEM_CAPITAL_RECEIVE_DAYS REDEEM_CAPITAL_RECEIVE_DAYS, TTB.BUY_CONFIRM_RETURN_DAYS BUY_CONFIRM_RETURN_DAYS, TTB.BUY_TRANSFER_DATE BUY_TRANSFER_DATE, TTB.TARGET_FUND_CODE TARGET_FUND_CODE, TTB.REQUEST_GROUP_ID REQUEST_GROUP_ID FROM TR_TRADE_BUSINESS TTB WHERE TTB.BUSINESS_CATEGORY = ‘30’ AND TTB.BUSINESS_TYPE <> ‘143’ AND TTB.WORKDAY >= TO_DATE(‘2025-09-03’, ‘YYYY-MM-DD’) AND TTB.WORKDAY < TO_DATE(‘2025-09-03’, ‘YYYY-MM-DD’) + 1 AND (TTB.TA_CODE = ‘02’ or TTB.TA_CODE = ‘04’ or TTB.TA_CODE = ‘05’ or TTB.TA_CODE = ‘06’ or TTB.TA_CODE = ‘08’ or TTB.TA_CODE = ‘09’ or TTB.TA_CODE = ‘0A’ or TTB.TA_CODE = ‘0F’ or TTB.TA_CODE = ‘0Q’ or TTB.TA_CODE = ‘0W’ or TTB.TA_CODE = ‘0Z’ or TTB.TA_CODE = ‘12’ or TTB.TA_CODE = ‘15’ or TTB.TA_CODE = ‘16’ or TTB.TA_CODE = ‘17’ or TTB.TA_CODE = ‘1L’ or TTB.TA_CODE = ‘1M’ or TTB.TA_CODE = ‘1N’ or TTB.TA_CODE = ‘20’ or TTB.TA_CODE = ‘21’ or TTB.TA_CODE = ‘23’ or TTB.TA_CODE = ‘25’ or TTB.TA_CODE = ‘27’ or TTB.TA_CODE = ‘29’ or TTB.TA_CODE = ‘2E’ or TTB.TA_CODE = ‘30’ or TTB.TA_CODE = ‘32’ or TTB.TA_CODE = ‘33’ or TTB.TA_CODE = ‘34’ or TTB.TA_CODE = ‘36’ or TTB.TA_CODE = ‘37’ or TTB.TA_CODE = ‘39’ or TTB.TA_CODE = ‘3J’ or TTB.TA_CODE = ‘3K’ or TTB.TA_CODE = ‘3M’ or TTB.TA_CODE = ‘3Q’ or TTB.TA_CODE = ‘3Z’ or TTB.TA_CODE = ‘40’ or TTB.TA_CODE = ‘42’ or TTB.TA_CODE = ‘46’ or TTB.TA_CODE = ‘47’ or TTB.TA_CODE = ‘49’ or TTB.TA_CODE = ‘4C’ or TTB.TA_CODE = ‘4T’ or TTB.TA_CODE = ‘4U’ or TTB.TA_CODE = ‘4Z’ or TTB.TA_CODE = ‘53’ or TTB.TA_CODE = ‘55’ or TTB.TA_CODE = ‘57’ or TTB.TA_CODE = ‘58’ or TTB.TA_CODE = ‘5C’ or TTB.TA_CODE = ‘5D’ or TTB.TA_CODE = ‘5L’ or TTB.TA_CODE = ‘5R’ or TTB.TA_CODE = ‘60’ or TTB.TA_CODE = ‘62’ or TTB.TA_CODE = ‘63’ or TTB.TA_CODE = ‘67’ or TTB.TA_CODE = ‘69’ or TTB.TA_CODE = ‘6E’ or TTB.TA_CODE = ‘6F’ or TTB.TA_CODE = ‘6K’ or TTB.TA_CODE = ‘70’ or TTB.TA_CODE = ‘74’ or TTB.TA_CODE = ‘75’ or TTB.TA_CODE = ‘76’ or TTB.TA_CODE = ‘7B’ or TTB.TA_CODE = ‘81’ or TTB.TA_CODE = ‘94’ or TTB.TA_CODE = ‘95’ or TTB.TA_CODE = ‘B0’ or TTB.TA_CODE = ‘C4’ or TTB.TA_CODE = ‘CJ’ or TTB.TA_CODE = ‘H0’ or TTB.TA_CODE = ‘SP’ or TTB.TA_CODE = ‘B6’ or TTB.TA_CODE = ‘0’)) tc LEFT JOIN tr_trade_business tb ON tc.trade_request_id = tb.trade_business_id LEFT JOIN tr_business_relation br ON br.atom_business_id = tc.trade_request_id LEFT JOIN tr_trade_request tr ON tr.trade_request_id = br.business_id LEFT JOIN ac_trade_account ta ON ta.trade_account_no = tc.trade_account_no LEFT JOIN ac_return_account_latest cu ON tc.trade_account_no = cu.trade_account_no AND tc.PAYMENT_CHANNEL_ID = cu.trust_channel_id LEFT JOIN ac_current_account ca ON cu.current_account_id = ca.current_account_id LEFT JOIN ac_payment_channel pc ON pc.payment_channel_id = tc.PAYMENT_CHANNEL_ID LEFT JOIN ca_voucher v ON v.trade_request_id = tc.trade_request_id LEFT JOIN ca_channel_relation cr ON cr.channel_relation_id = v.channel_relation_id WHERE (tc.business_type = ‘T122’ OR tc.business_type = ‘T139’ OR tc.business_type = ‘T191’) AND tc.confirm_amount <> 0 AND tc.workday >= TO_DATE(‘2025-09-03’, ‘YYYY-MM-DD’) AND tc.workday < TO_DATE(‘2025-09-03’, ‘YYYY-MM-DD’) + 1 这个是原始的sql,请根据优化方案给出调整后的sql

根据BAPI_ALM_ORDER_MAINTAIN源代码分析原因: FUNCTION bapi_alm_order_maintain. *"---------------------------------------------------------------------- *"*"Local Interface: *" IMPORTING *" VALUE(IV_MMSRV_EXTERNAL_MAINTENACE) TYPE BAPI_FLAG OPTIONAL *" TABLES *" IT_METHODS STRUCTURE BAPI_ALM_ORDER_METHOD *" IT_HEADER STRUCTURE BAPI_ALM_ORDER_HEADERS_I OPTIONAL *" IT_HEADER_UP STRUCTURE BAPI_ALM_ORDER_HEADERS_UP OPTIONAL *" IT_HEADER_SRV STRUCTURE BAPI_ALM_ORDER_SRVDAT_E OPTIONAL *" IT_HEADER_SRV_UP STRUCTURE BAPI_ALM_ORDER_SRVDAT_UP OPTIONAL *" IT_USERSTATUS STRUCTURE BAPI_ALM_ORDER_USRSTAT OPTIONAL *" IT_PARTNER STRUCTURE BAPI_ALM_ORDER_PARTN_MUL OPTIONAL *" IT_PARTNER_UP STRUCTURE BAPI_ALM_ORDER_PARTN_MUL_UP OPTIONAL *" IT_OPERATION STRUCTURE BAPI_ALM_ORDER_OPERATION OPTIONAL *" IT_OPERATION_UP STRUCTURE BAPI_ALM_ORDER_OPERATION_UP OPTIONAL *" IT_RELATION STRUCTURE BAPI_ALM_ORDER_RELATION OPTIONAL *" IT_RELATION_UP STRUCTURE BAPI_ALM_ORDER_RELATION_UP OPTIONAL *" IT_COMPONENT STRUCTURE BAPI_ALM_ORDER_COMPONENT OPTIONAL *" IT_COMPONENT_UP STRUCTURE BAPI_ALM_ORDER_COMPONENT_UP OPTIONAL *" IT_OBJECTLIST STRUCTURE BAPI_ALM_ORDER_OBJECTLIST OPTIONAL *" IT_OBJECTLIST_UP STRUCTURE BAPI_ALM_ORDER_OLIST_UP OPTIONAL *" IT_OLIST_RELATION STRUCTURE BAPI_ALM_OLIST_RELATION OPTIONAL *" IT_TEXT STRUCTURE BAPI_ALM_TEXT OPTIONAL *" IT_TEXT_LINES STRUCTURE BAPI_ALM_TEXT_LINES OPTIONAL *" IT_SRULE STRUCTURE BAPI_ALM_ORDER_SRULE OPTIONAL *" IT_SRULE_UP STRUCTURE BAPI_ALM_ORDER_SRULE_UP OPTIONAL *" IT_TASKLISTS STRUCTURE BAPI_ALM_ORDER_TASKLISTS_I OPTIONAL *" EXTENSION_IN STRUCTURE BAPIPAREX OPTIONAL *" RETURN STRUCTURE BAPIRET2 OPTIONAL *" ET_NUMBERS STRUCTURE BAPI_ALM_NUMBERS OPTIONAL *" IT_REFORDER_ITEM STRUCTURE BAPI_REFORDER_ITEM_I OPTIONAL *" IT_REFORDER_ITEM_UP STRUCTURE BAPI_REFORDER_ITEM_UP OPTIONAL *" IT_REFORDER_SERNO_OLIST_INS STRUCTURE *" BAPI_REFORDER_SERNO_OLIST_I OPTIONAL *" IT_REFORDER_SERNO_OLIST_DEL STRUCTURE *" BAPI_REFORDER_SERNO_OLIST_I OPTIONAL *" IT_PRT STRUCTURE BAPI_ALM_ORDER_PRT_I OPTIONAL *" IT_PRT_UP STRUCTURE BAPI_ALM_ORDER_PRT_UP OPTIONAL *" IT_REFORDER_OPERATION STRUCTURE BAPI_REFORDER_OPERATION *" OPTIONAL *" IT_SERVICEOUTLINE STRUCTURE BAPI_ALM_SRV_OUTLINE OPTIONAL *" IT_SERVICEOUTLINE_UP STRUCTURE BAPI_ALM_SRV_OUTLINE_UP *" OPTIONAL *" IT_SERVICELINES STRUCTURE BAPI_ALM_SRV_SERVICE_LINE OPTIONAL *" IT_SERVICELINES_UP STRUCTURE BAPI_ALM_SRV_SERVICE_LINE_UP *" OPTIONAL *" IT_SERVICELIMIT STRUCTURE BAPI_ALM_SRV_LIMIT_DATA OPTIONAL *" IT_SERVICELIMIT_UP STRUCTURE BAPI_ALM_SRV_LIMIT_DATA_UP *" OPTIONAL *" IT_SERVICECONTRACTLIMITS STRUCTURE *" BAPI_ALM_SRV_CONTRACT_LIMITS OPTIONAL *" IT_SERVICECONTRACTLIMITS_UP STRUCTURE *" BAPI_ALM_SRV_CONTRACT_LIMITS_U OPTIONAL *" ET_NOTIFICATION_NUMBERS STRUCTURE BAPI_ALM_NOTIF_NUMBERS *" OPTIONAL *" IT_PERMIT STRUCTURE BAPI_ALM_ORDER_PERMIT OPTIONAL *" IT_PERMIT_UP STRUCTURE BAPI_ALM_ORDER_PERMIT_UP OPTIONAL *" IT_PERMIT_ISSUE STRUCTURE BAPI_ALM_ORDER_PERMITISSUE OPTIONAL *" IT_ESTIMATED_COSTS STRUCTURE BAPI_ALM_ORDER_COSTS_EST_I *" OPTIONAL *" IT_HEADER_JVA STRUCTURE BAPI_ALM_ORDER_JVA OPTIONAL *" IT_HEADER_JVA_UP STRUCTURE BAPI_ALM_ORDER_JVA_UP OPTIONAL *" IT_ADDITIONAL_TEXT STRUCTURE BAPI_ALM_CC4_ADDITIONAL_TEXT *" OPTIONAL *"---------------------------------------------------------------------- ENHANCEMENT-POINT bapi_alm_order_maintain_g8 SPOTS es_saplibapi_alm_order STATIC. ENHANCEMENT-POINT bapi_alm_order_maintain_g6 SPOTS es_saplibapi_alm_order. * BAPI Funktionsbaustein zum Bearbeiten von ALM Aufträgen (PM/CS) * Die gewünschten Funktionen müssen über eine Methodentabelle * übergeben werden. Darin stehen die auszuführenden Methoden. * Die dazugehörigen Daten sind in den einzelnen Datentabellen * zuzuordnen. * Weitere Informationen befinden sich im BAPI Explorer unter * Instandhaltungsabwicklung bzw. Serviceabwicklung * Datendefinitionen *************************************** DATA lt_methods TYPE bapi_alm_order_method_t. * Zu bearbeitende Aufträge, die gelesen werden müssen DATA lt_orders TYPE almb_ord_pre_tab. * Methodenreihenfolge DATA lt_method_level TYPE almb_proc_level_tab. * Interne Datentabellen *********************************** * Auftragsköpfe DATA lt_caufvd TYPE almb_caufvd_tab_int. DATA lt_caufvd_up TYPE almb_caufvd_up_tab_int. * Servicedaten Auftragsköpfe DATA lt_pmsdo TYPE almb_caufvd_srv_tab_int. DATA lt_pmsdo_up TYPE almb_caufvd_srv_up_tab_int. * Auftragsköpfe (extern) DATA lt_bapihead TYPE almb_caufvd_tab. DATA ls_bapihead TYPE LINE OF almb_caufvd_tab. DATA lt_bapihead_up TYPE almb_caufvd_up_tab. DATA ls_bapihead_up TYPE LINE OF almb_caufvd_up_tab. DATA lt_bapihead_old TYPE almb_caufvd_tab. DATA lt_bapihead_old_up TYPE almb_caufvd_up_tab. * Servicedaten Auftragsköpfe (extern) DATA lt_bapisrvcdata TYPE almb_caufvd_srv_tab. DATA ls_bapisrvcdata TYPE LINE OF almb_caufvd_srv_tab. DATA lt_bapisrvcdata_up TYPE almb_caufvd_srv_up_tab. DATA ls_bapisrvcdata_up TYPE LINE OF almb_caufvd_srv_up_tab. DATA lt_bapisrvcdata_old TYPE almb_caufvd_srv_tab. DATA lt_bapisrvcdata_old_up TYPE almb_caufvd_srv_up_tab. * Auftragskopfdaten nach BADI für Abwärtskompatibilität DATA ls_header TYPE bapi_alm_order_headers_i. DATA ls_header_up TYPE bapi_alm_order_headers_up. DATA ls_header_srv TYPE bapi_alm_order_srvdat_e. DATA ls_header_srv_up TYPE bapi_alm_order_srvdat_up. DATA lt_header TYPE TABLE OF bapi_alm_order_headers_i. DATA lt_header_up TYPE TABLE OF bapi_alm_order_headers_up. DATA lt_header_srv TYPE TABLE OF bapi_alm_order_srvdat_e. DATA lt_header_srv_up TYPE TABLE OF bapi_alm_order_srvdat_up. * Userstatus DATA lt_userstatus TYPE almb_userstatus. * Partner DATA lt_partner TYPE almb_partner_tab. DATA lt_partner_up TYPE almb_partner_up_tab. * Vorgänge DATA lt_afvgd TYPE almb_afvgd_tab. DATA lt_afvgd_up TYPE almb_afvgd_up_tab. * Anordnungsbeziehungen DATA lt_afabd TYPE almb_afabd_tab. DATA lt_afabd_up TYPE almb_afabd_up_tab. * Komponenten DATA lt_resbd TYPE almb_resbd_tab. DATA lt_resbd_up TYPE almb_resbd_up_tab. * Objektliste DATA lt_riwol TYPE almb_riwol_tab. DATA lt_riwol_up TYPE almb_riwol_up_tab. * Objectlist: Relation Operation to Objectlist DATA lt_olist_relation TYPE almb_olist_relation_tab. * Task lists DATA lt_tasklists TYPE ibapi_order_tasklists_i_t. * Settlement rules DATA lt_cobl TYPE almb_cobl_tab. DATA lt_cobl_up TYPE almb_cobl_up_tab. * Langtexte DATA lt_text TYPE almb_text_tab. DATA lt_text_add TYPE almb_cc4_add_text_tab. "note 2756658 DATA lt_text_lines TYPE tlinetab. * Rückgabe der Nachrichten DATA lt_messages TYPE bal_t_msg. DATA ls_messages TYPE bal_s_msg. DATA ls_return LIKE LINE OF return[]. DATA lv_error TYPE sy-subrc. *Refurbishment order DATA lt_afpod TYPE ibapi_afpod_tt. DATA lt_afpod_resbd TYPE ibapi_reforder_comp_tt. DATA lt_serno_olist_ins TYPE reford_serno_olist_t. DATA lt_serno_olist_del TYPE reford_serno_olist_t. DATA lt_afpod_up TYPE ibapi_afpod_update_tt. DATA lt_afpod_resbd_up TYPE ibapi_reforder_comp_update_tt. DATA lt_reford_afvgd TYPE almb_afvgd_tab. *PRTs DATA lt_prt TYPE bapi_alm_order_prt_i_t. DATA lt_prt_up TYPE bapi_alm_order_prt_up_t. *Service packages DATA lt_serviceoutline TYPE bapi_alm_srv_outline_t. DATA lt_serviceoutline_up TYPE bapi_alm_srv_outline_up_t. DATA lt_servicelines TYPE bapi_alm_srv_service_line_t. DATA lt_servicelines_up TYPE bapi_alm_srv_service_line_up_t. DATA lt_servicelimit TYPE bapi_alm_srv_limit_data_t. DATA lt_servicelimit_up TYPE bapi_alm_srv_limit_data_up_t. DATA lt_servicecontractlimits TYPE bapi_alm_srv_contract_limit_t. DATA lt_servicecontractlimits_up TYPE bapi_alm_srv_contr_limits_u_t. * Note 1989741 - begin DATA: ls_extension_up TYPE almb_extension_up. DATA: lt_extension_up TYPE almb_extension_up_tab. * Note 1989741 - end *Permits DATA lt_permit TYPE eam_t_permit_order. DATA lt_permit_up TYPE eam_t_permit_order_up. DATA lt_permit_issue TYPE eam_t_permit_issue. * Estimated costs DATA: lt_est_cost TYPE bapi_alm_order_costs_est_i_tt. " 1672966 EAMCC PM110 * Settlement profiles DATA: lt_settlmt_profile TYPE almb_settlmt_profile_tab. * >>>>> Begin note 2304265: DFPS specific variables data lv_method_del type abap_bool. * <<<<< End note 2304265 * DATA lt_serno_olist_up TYPE REFORD_SERNO_OLIST_UPDATE_TT. FIELD-SYMBOLS <fs_olist_relation> LIKE LINE OF lt_olist_relation. FIELD-SYMBOLS <fs_methods> LIKE LINE OF lt_methods. "1837200 cl_eam_usage=>insert('BAPI_ALM_ORDER_MAINTAIN'). * BADIs * Vorwärtsdeklaration für exit handler BAdI CLASS cl_exithandler DEFINITION LOAD. * Interfacereferenz für BAdI STATICS sr_modify_input_data TYPE REF TO if_ex_ibapi_alm_ord_modify. STATICS sv_badiactive. * Konstante für BAdI-Referenzierung CONSTANTS lc_badiname TYPE exit_def VALUE 'IBAPI_ALM_ORD_MODIFY'. * start FLE MATNR BAPI Changes DATA: ls_fnames TYPE cl_matnr_chk_mapper=>ts_matnr_bapi_fnames, lt_fnames_hdr TYPE cl_matnr_chk_mapper=>tt_matnr_bapi_fname, lt_fnames_hdr_srv TYPE cl_matnr_chk_mapper=>tt_matnr_bapi_fname, lt_fnames_comp TYPE cl_matnr_chk_mapper=>tt_matnr_bapi_fname, lt_fnames_obj_list TYPE cl_matnr_chk_mapper=>tt_matnr_bapi_fname, lt_fnames_oper TYPE cl_matnr_chk_mapper=>tt_matnr_bapi_fname, lt_fnames_prt TYPE cl_matnr_chk_mapper=>tt_matnr_bapi_fname, lt_fnames_ref_ord_itm TYPE cl_matnr_chk_mapper=>tt_matnr_bapi_fname, lt_fnames_ref_ord_opr TYPE cl_matnr_chk_mapper=>tt_matnr_bapi_fname. DATA: lt_matnr_data_to_x_key_fnames TYPE cl_matnr_chk_mapper=>tt_matnr_data_to_x_key_fnames. DATA: lt_matnr_dta_2_xkey_fnames_hdr TYPE cl_matnr_chk_mapper=>tt_matnr_data_to_x_key_fnames. DATA: lt_mtnr_dta2xkey_fnames_hdrsrv TYPE cl_matnr_chk_mapper=>tt_matnr_data_to_x_key_fnames. DATA: lt_matnr_dta_2_xkey_fnames_opr TYPE cl_matnr_chk_mapper=>tt_matnr_data_to_x_key_fnames. DATA: lt_matnr_dta_2_xkey_fnames_cmp TYPE cl_matnr_chk_mapper=>tt_matnr_data_to_x_key_fnames. DATA: lt_mtnr_dta2xkey_fnames_rfoitm TYPE cl_matnr_chk_mapper=>tt_matnr_data_to_x_key_fnames. DATA: ls_matnr_data_to_x_key_fnames LIKE LINE OF lt_matnr_data_to_x_key_fnames. DATA: ls_matnr_data_to_x_line_ass TYPE cl_matnr_chk_mapper=>ts_matnr_data_to_x_line_ass. DATA: lt_matnr_data_to_x_line_ass TYPE cl_matnr_chk_mapper=>tt_matnr_data_to_x_line_ass. DATA: lv_linecount_data TYPE i. DATA: lv_linecount_data_up TYPE i. * MATERIAL CLEAR ls_fnames. ls_fnames-int = 'MATERIAL'. ls_fnames-ext = 'MATERIAL_EXTERNAL'. ls_fnames-vers = 'MATERIAL_VERSION'. ls_fnames-guid = 'MATERIAL_GUID'. ls_fnames-long = 'MATERIAL_LONG'. INSERT ls_fnames INTO TABLE lt_fnames_prt. ls_fnames-int_x = 'MATERIAL'. ls_fnames-ext_x = 'MATERIAL'. "no update flag existing, flag of internal field is used ls_fnames-vers_x = 'MATERIAL'. "no update flag existing, flag of internal field is used * ls_fnames-guid_x = 'MATERIAL_GUID'. ls_fnames-long_x = 'MATERIAL_LONG'. INSERT ls_fnames INTO TABLE lt_fnames_hdr. INSERT ls_fnames INTO TABLE lt_fnames_hdr_srv. INSERT ls_fnames INTO TABLE lt_fnames_comp. * ASSEMBLY CLEAR ls_fnames. ls_fnames-int = 'ASSEMBLY'. ls_fnames-ext = 'ASSEMBLY_EXTERNAL'. ls_fnames-vers = 'ASSEMBLY_VERSION'. ls_fnames-guid = 'ASSEMBLY_GUID'. ls_fnames-long = 'ASSEMBLY_LONG'. INSERT ls_fnames INTO TABLE lt_fnames_ref_ord_opr. INSERT ls_fnames INTO TABLE lt_fnames_obj_list. ls_fnames-int_x = 'ASSEMBLY'. ls_fnames-ext_x = 'ASSEMBLY'. "no update flag existing, flag of internal field is used ls_fnames-vers_x = 'ASSEMBLY'. "no update flag existing, flag of internal field is used * ls_fnames-guid_x = 'ASSEMBLY_GUID'. ls_fnames-long_x = 'ASSEMBLY_LONG'. INSERT ls_fnames INTO TABLE lt_fnames_hdr. INSERT ls_fnames INTO TABLE lt_fnames_oper. * SERMAT CLEAR ls_fnames. ls_fnames-int = 'SERMAT'. ls_fnames-ext = 'SERMAT_EXTERNAL'. ls_fnames-vers = 'SERMAT_VERSION'. ls_fnames-guid = 'SERMAT_GUID'. ls_fnames-long = 'SERMAT_LONG'. * ls_fnames-int_x = 'SERMAT'. * ls_fnames-ext_x = 'SERMAT_EXTERNAL'. * ls_fnames-vers_x = 'SERMAT_VERSION'. * ls_fnames-guid_x = 'SERMAT_GUID'. * ls_fnames-long_x = 'SERMAT_LONG'. INSERT ls_fnames INTO TABLE lt_fnames_obj_list. * MATERIAL_TO CLEAR ls_fnames. ls_fnames-int = 'MATERIAL_TO'. ls_fnames-ext = 'MATERIAL_TO_EXTERNAL'. ls_fnames-vers = 'MATERIAL_TO_VERSION'. ls_fnames-guid = 'MATERIAL_TO_GUID'. ls_fnames-long = 'MATERIAL_TO_LONG'. ls_fnames-int_x = 'MATERIAL_TO'. ls_fnames-ext_x = 'MATERIAL_TO'. "no update flag existing, flag of internal field is used ls_fnames-vers_x = 'MATERIAL_TO'. "no update flag existing, flag of internal field is used * ls_fnames-guid_x = 'MATERIAL_TO_GUID'. ls_fnames-long_x = 'MATERIAL_TO_LONG'. INSERT ls_fnames INTO TABLE lt_fnames_ref_ord_itm. * IT_HEADER CLEAR ls_matnr_data_to_x_key_fnames. ls_matnr_data_to_x_key_fnames-data_key_field = 'ORDERID'. ls_matnr_data_to_x_key_fnames-x_key_field = 'ORDERID'. APPEND ls_matnr_data_to_x_key_fnames TO lt_matnr_dta_2_xkey_fnames_hdr. cl_matnr_chk_mapper=>bapi_tables_conv_tab_x_names( EXPORTING iv_int_to_external = abap_false it_fnames = lt_fnames_hdr it_matnr_data_to_x_key_fnames = lt_matnr_dta_2_xkey_fnames_hdr CHANGING ct_matnr = it_header[] ct_matnrx = it_header_up[] EXCEPTIONS excp_matnr_ne = 1 excp_matnr_invalid_input = 2 OTHERS = 3 ). IF sy-subrc NE 0. CALL METHOD cl_matnr_chk_mapper=>bapi_get_last_error IMPORTING ev_return = ls_return. APPEND ls_return TO return. IF ls_return-type NA 'SIW'. RETURN. ENDIF. ENDIF. * IT_HEADER_SRV - No key fields DESCRIBE TABLE it_header_srv[] LINES lv_linecount_data. DESCRIBE TABLE it_header_srv_up[] LINES lv_linecount_data_up. CLEAR lt_matnr_data_to_x_line_ass[]. IF lv_linecount_data = lv_linecount_data_up. lv_linecount_data = 0. WHILE lv_linecount_data LT lv_linecount_data_up. ADD 1 TO lv_linecount_data. ls_matnr_data_to_x_line_ass-ass_x_line_idx = lv_linecount_data. ls_matnr_data_to_x_line_ass-data_line_idx = lv_linecount_data. APPEND ls_matnr_data_to_x_line_ass TO lt_matnr_data_to_x_line_ass. ENDWHILE. ENDIF. cl_matnr_chk_mapper=>bapi_tables_conv_tab_x_idx( EXPORTING iv_int_to_external = abap_false it_fnames = lt_fnames_hdr_srv it_matnr_data_to_x_line_ass = lt_matnr_data_to_x_line_ass CHANGING ct_matnr = it_header_srv[] ct_matnrx = it_header_srv_up[] EXCEPTIONS excp_matnr_ne = 1 excp_matnr_invalid_input = 2 OTHERS = 3 ). IF sy-subrc NE 0. CALL METHOD cl_matnr_chk_mapper=>bapi_get_last_error IMPORTING ev_return = ls_return. APPEND ls_return TO return. IF ls_return-type NA 'SIW'. RETURN. ENDIF. ENDIF. * IT_OPERATION - No key fields * DESCRIBE TABLE it_operation[] LINES lv_linecount_data. * DESCRIBE TABLE it_operation_up[] LINES lv_linecount_data_up. * CLEAR lt_matnr_data_to_x_line_ass[]. * IF lv_linecount_data = lv_linecount_data_up. * lv_linecount_data = 0. * WHILE lv_linecount_data LT lv_linecount_data_up. * ADD 1 TO lv_linecount_data. * ls_matnr_data_to_x_line_ass-ass_x_line_idx = lv_linecount_data. * ls_matnr_data_to_x_line_ass-data_line_idx = lv_linecount_data. * APPEND ls_matnr_data_to_x_line_ass TO lt_matnr_data_to_x_line_ass. * ENDWHILE. * ENDIF. CLEAR lt_matnr_data_to_x_line_ass[]. LOOP AT it_operation_up. READ TABLE it_operation INDEX sy-tabix TRANSPORTING NO FIELDS. IF sy-subrc IS INITIAL. ls_matnr_data_to_x_line_ass-ass_x_line_idx = sy-tabix. ls_matnr_data_to_x_line_ass-data_line_idx = sy-tabix. APPEND ls_matnr_data_to_x_line_ass TO lt_matnr_data_to_x_line_ass. ENDIF. ENDLOOP. cl_matnr_chk_mapper=>bapi_tables_conv_tab_x_idx( EXPORTING iv_int_to_external = abap_false it_fnames = lt_fnames_oper it_matnr_data_to_x_line_ass = lt_matnr_data_to_x_line_ass CHANGING ct_matnr = it_operation[] ct_matnrx = it_operation_up[] EXCEPTIONS excp_matnr_ne = 1 excp_matnr_invalid_input = 2 OTHERS = 3 ). IF sy-subrc NE 0. CALL METHOD cl_matnr_chk_mapper=>bapi_get_last_error IMPORTING ev_return = ls_return. APPEND ls_return TO return. IF ls_return-type NA 'SIW'. RETURN. ENDIF. ENDIF. * IT_COMPONENT - No key fields * DESCRIBE TABLE it_component[] LINES lv_linecount_data. * DESCRIBE TABLE it_component_up[] LINES lv_linecount_data_up. * CLEAR lt_matnr_data_to_x_line_ass[]. * IF lv_linecount_data = lv_linecount_data_up. * lv_linecount_data = 0. * WHILE lv_linecount_data LT lv_linecount_data_up. * ADD 1 TO lv_linecount_data. * ls_matnr_data_to_x_line_ass-ass_x_line_idx = lv_linecount_data. * ls_matnr_data_to_x_line_ass-data_line_idx = lv_linecount_data. * APPEND ls_matnr_data_to_x_line_ass TO lt_matnr_data_to_x_line_ass. * ENDWHILE. * ENDIF. CLEAR lt_matnr_data_to_x_line_ass[]. LOOP AT it_component_up. READ TABLE it_component INDEX sy-tabix TRANSPORTING NO FIELDS. IF sy-subrc IS INITIAL. ls_matnr_data_to_x_line_ass-ass_x_line_idx = sy-tabix. ls_matnr_data_to_x_line_ass-data_line_idx = sy-tabix. APPEND ls_matnr_data_to_x_line_ass TO lt_matnr_data_to_x_line_ass. ENDIF. ENDLOOP. cl_matnr_chk_mapper=>bapi_tables_conv_tab_x_idx( EXPORTING iv_int_to_external = abap_false it_fnames = lt_fnames_comp it_matnr_data_to_x_line_ass = lt_matnr_data_to_x_line_ass CHANGING ct_matnr = it_component[] ct_matnrx = it_component_up[] EXCEPTIONS excp_matnr_ne = 1 excp_matnr_invalid_input = 2 OTHERS = 3 ). IF sy-subrc NE 0. CALL METHOD cl_matnr_chk_mapper=>bapi_get_last_error IMPORTING ev_return = ls_return. APPEND ls_return TO return. IF ls_return-type NA 'SIW'. RETURN. ENDIF. ENDIF. * IT_REFORDER_ITEM CLEAR ls_matnr_data_to_x_key_fnames. ls_matnr_data_to_x_key_fnames-data_key_field = 'ORDERID'. ls_matnr_data_to_x_key_fnames-x_key_field = 'ORDERID'. APPEND ls_matnr_data_to_x_key_fnames TO lt_mtnr_dta2xkey_fnames_rfoitm. cl_matnr_chk_mapper=>bapi_tables_conv_tab_x_names( EXPORTING iv_int_to_external = abap_false it_fnames = lt_fnames_ref_ord_itm it_matnr_data_to_x_key_fnames = lt_mtnr_dta2xkey_fnames_rfoitm CHANGING ct_matnr = it_reforder_item[] ct_matnrx = it_reforder_item_up[] EXCEPTIONS excp_matnr_ne = 1 excp_matnr_invalid_input = 2 OTHERS = 3 ). IF sy-subrc NE 0. CALL METHOD cl_matnr_chk_mapper=>bapi_get_last_error IMPORTING ev_return = ls_return. APPEND ls_return TO return. IF ls_return-type NA 'SIW'. RETURN. ENDIF. ENDIF. * IT_OBJECTLIST * No UP-structure with material field CALL METHOD cl_matnr_chk_mapper=>bapi_tables_conv_tab EXPORTING iv_int_to_external = abap_false it_fnames = lt_fnames_obj_list CHANGING ct_matnr = it_objectlist[] EXCEPTIONS excp_matnr_ne = 1 excp_matnr_invalid_input = 2 OTHERS = 3. IF sy-subrc NE 0. CALL METHOD cl_matnr_chk_mapper=>bapi_get_last_error IMPORTING ev_return = ls_return. APPEND ls_return TO return. IF ls_return-type NA 'SIW'. RETURN. ENDIF. ENDIF. * IT_PRT * No UP-structure with material field CALL METHOD cl_matnr_chk_mapper=>bapi_tables_conv_tab EXPORTING iv_int_to_external = abap_false it_fnames = lt_fnames_prt CHANGING ct_matnr = it_prt[] EXCEPTIONS excp_matnr_ne = 1 excp_matnr_invalid_input = 2 OTHERS = 3. IF sy-subrc NE 0. CALL METHOD cl_matnr_chk_mapper=>bapi_get_last_error IMPORTING ev_return = ls_return. APPEND ls_return TO return. IF ls_return-type NA 'SIW'. RETURN. ENDIF. ENDIF. * IT_REFORDER_OPERATION * No UP-structure CALL METHOD cl_matnr_chk_mapper=>bapi_tables_conv_tab EXPORTING iv_int_to_external = abap_false it_fnames = lt_fnames_ref_ord_opr CHANGING ct_matnr = it_reforder_operation[] EXCEPTIONS excp_matnr_ne = 1 excp_matnr_invalid_input = 2 OTHERS = 3. IF sy-subrc NE 0. CALL METHOD cl_matnr_chk_mapper=>bapi_get_last_error IMPORTING ev_return = ls_return. APPEND ls_return TO return. IF ls_return-type NA 'SIW'. RETURN. ENDIF. ENDIF. * end FLE MATNR BAPI Changes * Initialisierungen *************************************** * setzen BAPI-Flag z.B. für Prüfloserzeugung MOVE 'X' TO gv_bapi_flg. "note 1302002 * Memory refresh CALL FUNCTION 'IBAPI_PROC_INIT_REQUEST'. * Badi initialisieren IF sv_badiactive IS INITIAL. CALL METHOD cl_exithandler=>get_instance EXPORTING exit_name = lc_badiname null_instance_accepted = 'X' CHANGING instance = sr_modify_input_data. sv_badiactive = 'X'. ENDIF. * Retrunparemetertabellen löschen CLEAR return[]. CLEAR et_numbers[]. * globales Bapiflag setzen CALL FUNCTION 'IBAPI_Z_SET_BAPI_FLAG' EXPORTING iv_flag = 'X'. CALL FUNCTION 'DIALOG_GET_STATUS' "Note 1441350 IMPORTING "Note 1441350 dialog_status = gv_dialog. "Note 1441350 CALL FUNCTION 'DIALOG_SET_NO_DIALOG'. "Note 1441350 * Aktionsbuffer für Auftragskopfdaten CALL FUNCTION 'IBAPI_ALM_ORDER_INIT_ACTIONS'. * Application Log initialisieren PERFORM alm_order_msg_log_init. * Tabelle mit Methoden kopieren MOVE it_methods[] TO lt_methods. * start of note 1837200 * usage of method DIALOG together with MMSRV is not supported READ TABLE lt_methods TRANSPORTING NO FIELDS WITH KEY method = 'DIALOG'. IF sy-subrc = 0. LOOP AT lt_methods ASSIGNING <fs_methods> WHERE objecttype CS 'SERVICE'. MESSAGE e137(iwo_bapi2) WITH <fs_methods>-objecttype INTO mess. bapi_message. MESSAGE e113(iwo_bapi2) INTO mess. bapi_message. PERFORM end_bapi CHANGING return[]. PERFORM reset_created_headers USING et_numbers[] lt_method_level. RETURN. ENDLOOP. ENDIF. * end of note 1837200 * Schnittstellendaten in interne Strukturen umwandeln ***** CALL FUNCTION 'IBAPI_PROC_INTERFACE_E2I' EXPORTING it_header = it_header[] it_header_up = it_header_up[] it_header_srv = it_header_srv[] it_header_srv_up = it_header_srv_up[] it_userstatus = it_userstatus[] it_partner = it_partner[] it_partner_up = it_partner_up[] it_operation = it_operation[] it_operation_up = it_operation_up[] it_relation = it_relation[] it_relation_up = it_relation_up[] it_component = it_component[] it_component_up = it_component_up[] it_objectlist = it_objectlist[] it_objectlist_up = it_objectlist_up[] it_olist_relation = it_olist_relation[] it_srule = it_srule[] it_srule_up = it_srule_up[] it_text = it_text[] it_text_lines = it_text_lines[] it_tasklists = it_tasklists[] it_reforder_item = it_reforder_item[] it_reforder_item_up = it_reforder_item_up[] it_reforder_operation = it_reforder_operation[] it_reforder_serno_olist_ins = it_reforder_serno_olist_ins[] it_reforder_serno_olist_del = it_reforder_serno_olist_del[] it_serviceoutline = it_serviceoutline[] it_servicelines = it_servicelines[] it_servicelimit = it_servicelimit[] it_servicecontractlimits = it_servicecontractlimits[] it_serviceoutline_up = it_serviceoutline_up[] it_servicelines_up = it_servicelines_up[] it_servicelimit_up = it_servicelimit_up[] it_servicecontractlimits_up = it_servicecontractlimits_up[] it_permit = it_permit[] it_permit_up = it_permit_up[] it_permit_issue = it_permit_issue[] it_estimated_costs = it_estimated_costs[] " 1672966 EAMCC PM110 it_header_jva = it_header_jva[] it_header_jva_up = it_header_jva_up[] it_text_add = it_additional_text[] "note 2756658 IMPORTING et_caufvd = lt_caufvd et_caufvd_up = lt_caufvd_up et_caufvd_srv = lt_pmsdo et_caufvd_srv_up = lt_pmsdo_up et_userstatus = lt_userstatus et_partner = lt_partner et_partner_up = lt_partner_up et_afvgd = lt_afvgd et_afvgd_up = lt_afvgd_up et_afabd = lt_afabd et_afabd_up = lt_afabd_up et_resbd = lt_resbd et_resbd_up = lt_resbd_up et_riwol = lt_riwol et_riwol_up = lt_riwol_up et_olist_relation = lt_olist_relation et_cobl = lt_cobl et_cobl_up = lt_cobl_up et_thead = lt_text et_tlines = lt_text_lines et_tasklists = lt_tasklists et_afpod = lt_afpod et_afpod_up = lt_afpod_up et_afpod_resbd = lt_afpod_resbd et_afpod_resbd_up = lt_afpod_resbd_up et_reford_afvgd = lt_reford_afvgd et_serno_olist_ins = lt_serno_olist_ins et_serno_olist_del = lt_serno_olist_del et_serviceoutline = lt_serviceoutline et_servicelines = lt_servicelines et_servicelimit = lt_servicelimit et_servicecontractlimits = lt_servicecontractlimits et_serviceoutline_up = lt_serviceoutline_up et_servicelines_up = lt_servicelines_up et_servicelimit_up = lt_servicelimit_up et_servicecontractlimits_up = lt_servicecontractlimits_up et_permit = lt_permit et_permit_up = lt_permit_up et_permit_issue = lt_permit_issue et_estimated_costs = lt_est_cost " 1672966 EAMCC PM110 et_thead_add = lt_text_add "note 2756658 et_settlement_profile = lt_settlmt_profile EXCEPTIONS conversion_error = 1 textline_error = 2 OTHERS = 3. IF sy-subrc NE 0. PERFORM end_bapi CHANGING return[]. EXIT. ENDIF. *--- fill PRT data in int. tables (mapping is performed later) lt_prt = it_prt[]. lt_prt_up = it_prt_up[]. * BADI zum prüfen und ändern der Eingabedaten ************* * aufrufen. Zu diesem Zeitpunkt sind die meisten ********** * Daten im internen Format verfügbar ********************** IF NOT sr_modify_input_data IS INITIAL. * Abwärtskompatibilität: In frühen Versionen wurden nur die externen * Repräsentationen der Auftragskopfdaten angeboten. Dabei können nur * bestimmte Teile der Auftragsköpfe geändert werden. Falls aber Kunden * bereits eine entsprechende BAdI-Implementation erstellt haben, wird * Nacharbeit notwendig, um die alte Logik nach wie vor zu * unterstützen LOOP AT it_header. MOVE-CORRESPONDING it_header TO ls_bapihead. APPEND ls_bapihead TO lt_bapihead. ENDLOOP. LOOP AT it_header_up. MOVE-CORRESPONDING it_header_up TO ls_bapihead_up. APPEND ls_bapihead_up TO lt_bapihead_up. ENDLOOP. LOOP AT it_header_srv. MOVE-CORRESPONDING it_header_srv TO ls_bapisrvcdata. MOVE it_header_srv-material_long TO ls_bapisrvcdata-material. "MFLE APPEND ls_bapisrvcdata TO lt_bapisrvcdata. ENDLOOP. LOOP AT it_header_srv_up. MOVE-CORRESPONDING it_header_srv_up TO ls_bapisrvcdata_up. MOVE it_header_srv_up-material_long TO ls_bapisrvcdata_up-material. "MFLE APPEND ls_bapisrvcdata_up TO lt_bapisrvcdata_up. ENDLOOP. * Before-Image für externe Datenrepräsentation sichern lt_bapihead_old = lt_bapihead. lt_bapihead_old_up = lt_bapihead_up. lt_bapisrvcdata_old = lt_bapisrvcdata. lt_bapisrvcdata_old_up = lt_bapisrvcdata_up. CLEAR lt_extension_up. " Note 1989741 cl_im_eams_ord_cfd_write=>extension_in_tab = extension_in[]. LOOP AT extension_in. CALL METHOD sr_modify_input_data->modify_input_data EXPORTING extension_in = extension_in CHANGING ct_methods = lt_methods ct_header = lt_bapihead ct_header_up = lt_bapihead_up ct_header_srv = lt_bapisrvcdata ct_header_srv_up = lt_bapisrvcdata_up ct_userstatus = lt_userstatus ct_partner = lt_partner ct_partner_up = lt_partner_up ct_operation = lt_afvgd ct_operation_up = lt_afvgd_up ct_relation = lt_afabd ct_relation_up = lt_afabd_up ct_component = lt_resbd ct_component_up = lt_resbd_up ct_objectlist = lt_riwol ct_text = lt_text ct_text_lines = lt_text_lines ct_messages = lt_messages ct_header_int = lt_caufvd ct_header_int_up = lt_caufvd_up ct_pmsdo_srv = lt_pmsdo ct_pmsdo_srv_up = lt_pmsdo_up ct_reforder_item_int = lt_afpod ct_reforder_item_int_up = lt_afpod_up ct_reforder_comp = lt_afpod_resbd ct_reforder_comp_up = lt_afpod_resbd_up ct_reforder_serno_olist_ins = lt_serno_olist_ins ct_reforder_serno_olist_del = lt_serno_olist_del ct_prt = lt_prt ct_prt_up = lt_prt_up ct_serviceoutline = lt_serviceoutline ct_serviceoutline_up = lt_serviceoutline_up ct_servicelines = lt_servicelines ct_servicelines_up = lt_servicelines_up ct_servicelimit = lt_servicelimit ct_servicelimit_up = lt_servicelimit_up ct_servicecontractlimits = lt_servicecontractlimits ct_servicecontractlimits_up = lt_servicecontractlimits_up ct_estimated_costs = lt_est_cost. " 1672966 EAMCC PM110 * Note 1989741 - begin IF extension_in-structure IS NOT INITIAL. ls_extension_up-fieldname = extension_in-structure. ls_extension_up-bapiupdate = 'X'. APPEND ls_extension_up TO lt_extension_up. ENDIF. * Note 1989741 - end ENDLOOP. * Before- und After-Image für alte Logik vergleichen: * Bei Delta nur die externe Repräsentation der Kopfdaten verwenden IF lt_bapihead_old <> lt_bapihead OR lt_bapihead_old_up <> lt_bapihead_up OR lt_bapisrvcdata_old <> lt_bapisrvcdata OR lt_bapisrvcdata_old_up <> lt_bapisrvcdata_up. * Aus im BAdI veränderten Daten Import-Daten wiederherstellen, * Konvertierung für Kopfdaten erneut durchführen LOOP AT lt_bapihead INTO ls_bapihead. MOVE-CORRESPONDING ls_bapihead TO ls_header. APPEND ls_header TO lt_header. ENDLOOP. LOOP AT lt_bapihead_up INTO ls_bapihead_up. MOVE-CORRESPONDING ls_bapihead_up TO ls_header_up. APPEND ls_header_up TO lt_header_up. ENDLOOP. LOOP AT lt_bapisrvcdata INTO ls_bapisrvcdata. MOVE-CORRESPONDING ls_bapisrvcdata TO ls_header_srv. ls_header_srv-material_long = ls_bapisrvcdata-material. "MFLE CLEAR: ls_header_srv-material. "MFLE APPEND ls_header_srv TO lt_header_srv. ENDLOOP. LOOP AT lt_bapisrvcdata_up INTO ls_bapisrvcdata_up. MOVE-CORRESPONDING ls_bapisrvcdata_up TO ls_header_srv_up. ls_header_srv_up-material_long = ls_bapisrvcdata_up-material. "MFLE APPEND ls_header_srv_up TO lt_header_srv_up. ENDLOOP. CALL FUNCTION 'IBAPI_PROC_INTERFACE_E2I' EXPORTING it_header = lt_header[] it_header_up = lt_header_up[] it_header_srv = lt_header_srv[] it_header_srv_up = lt_header_srv_up[] it_userstatus = it_userstatus[] it_partner = it_partner[] it_operation = it_operation[] it_relation = it_relation[] it_component = it_component[] it_text = it_text[] it_text_lines = it_text_lines[] IMPORTING et_caufvd = lt_caufvd et_caufvd_up = lt_caufvd_up et_caufvd_srv = lt_pmsdo et_caufvd_srv_up = lt_pmsdo_up EXCEPTIONS conversion_error = 1 textline_error = 2 OTHERS = 3. IF sy-subrc NE 0. PERFORM end_bapi CHANGING return[]. EXIT. ENDIF. ENDIF. ENDIF. * Messages vom BADI auswerten und ins BAPI-Log scheiben * Fehler in Tabelle RETURN schreiben. * Bei Message E oder A bricht der Bapi ab CLEAR return[]. LOOP AT lt_messages INTO ls_messages. CALL FUNCTION 'BALW_BAPIRETURN_GET2' EXPORTING type = ls_messages-msgty cl = ls_messages-msgid number = ls_messages-msgno par1 = ls_messages-msgv1 par2 = ls_messages-msgv2 par3 = ls_messages-msgv3 par4 = ls_messages-msgv4 IMPORTING return = ls_return. APPEND ls_return TO return[]. IF ls_messages-msgty CA 'AE'. MOVE 4 TO lv_error. ENDIF. ENDLOOP. "Message-Log zurückgeben IF lv_error NE 0. EXIT. ENDIF. * Prüfen, ob der Trace geschrieben werden soll, * und ihn dann auf das Frontend schreiben. Dies * geht natürlich nur, wenn der BAPI vom Frontend * aus aufgerufen wird. * Der Trace kann auch dazu dienen festzustellen, ob die * Daten korrekt kovertiert wurden, und der BADI das * richtige gemacht hat. CALL FUNCTION 'IBAPI_PROC_SAVE_TRACE' EXPORTING it_header = lt_caufvd it_header_up = lt_caufvd_up it_header_srv = lt_pmsdo it_header_srv_up = lt_pmsdo_up it_userstatus = lt_userstatus it_partner = lt_partner it_partner_up = lt_partner_up it_operation = lt_afvgd it_operation_up = lt_afvgd_up it_relation = lt_afabd it_relation_up = lt_afabd_up it_component = lt_resbd it_component_up = lt_resbd_up it_objectlist = lt_riwol it_srule = lt_cobl it_srule_up = lt_cobl_up it_text = lt_text it_text_lines = lt_text_lines it_tasklists = lt_tasklists CHANGING ct_methods = lt_methods. * Methodentabelle auf Konsistenz prüfen und in internes * Format umsetzen. Bestimmen, welche Aufträge in die * Belegtabelle gelesen werden müssen. CALL FUNCTION 'IBAPI_PROC_METHOD_TABLE_E2I' IMPORTING et_orders = lt_orders CHANGING ct_method_table = lt_methods EXCEPTIONS object_unknown = 1 method_unknown = 2 invalid_order_key = 3 required_order_no_created = 4 save_or_dialog_required = 5 OTHERS = 6. IF sy-subrc NE 0. * Fehler werden bereits in FB geloggt * setzen des Fehlerflags und verlassen des Bapis PERFORM end_bapi CHANGING return[]. EXIT. ENDIF. * Reihenfolge der Bearbeitung festlegen. ****************** * dies ist vor allem dann wichtig, wenn ******************* * Anordnungsbeziehungen zwischen neu ********************** * angelegten Vorgängen erzeugt werden sollen. ************* CALL FUNCTION 'IBAPI_SET_METHOD_LEVEL' EXPORTING it_methods = lt_methods IMPORTING et_method_level = lt_method_level. * Lesen der Aufträge in die Belegtabellen und sperren. CALL FUNCTION 'IBAPI_READ_AND_LOCK_ORDERS' EXPORTING it_aufnr = lt_orders it_methods = lt_methods EXCEPTIONS order_not_found = 1 release_no_change = 2 order_locked = 3 OTHERS = 4. IF sy-subrc NE 0. * Fehler beim Lesen der Aufträge in die Belegtabellen PERFORM end_bapi CHANGING return[]. EXIT. ENDIF. * For supporting geospatial data processing,the code related to note 2550268 is disabled **-- check orders is geo enabled note 2550268 * PERFORM eamgef_order_check USING it_header[] * lt_method_level * CHANGING lv_error. * IF lv_error NE 0. * PERFORM end_bapi CHANGING return[]. * EXIT. * ENDIF. "note 2550268 * For supporting geospatial data processing,the code related to note 2550268 is disabled * Linear Asset Management EhP5 IF cl_ops_switch_check=>eam_sfws_lfe( ) IS NOT INITIAL. CALL METHOD cl_eaml_ea_bapi_util=>set_order_data_buf EXPORTING it_header = it_header[] it_header_up = it_header_up[] it_operation = it_operation[] it_operation_up = it_operation_up[]. ENDIF. * >>>>> Begin note 2304265: DFPS specific checks clear lv_method_del. if cl_check_switch=>dfps_is_active( ) = abap_true. perform dfps_auth_check tables it_header return changing lt_method_level lv_method_del. endif. if lv_method_del = abap_true. * At least one method was deleted by the DFPS change protection checks, therefore it will be checked in the following * if only a save method remains in the processing methods. If yes, this save must no longer be processed. if lines( lt_method_level ) = 1. read table lt_method_level transporting no fields with key method = if_eams_bo_const=>gc_bapi_ord_method-save. if sy-subrc = 0. * only a save method exists ==> delete this method too clear lt_method_level. endif. endif. endif. if lt_method_level is not initial. * <<<<< End note 2304265 * Ausführen der in der Methodentabelle hinterlegten ******* * Methoden ************************************************ CALL FUNCTION 'IBAPI_PROC_METHOD_TABLE_EXEC' EXPORTING it_proc_level_tab = lt_method_level it_order_tab = lt_caufvd it_order_up_tab = lt_caufvd_up it_order_srv_tab = lt_pmsdo it_order_srv_up_tab = lt_pmsdo_up it_userstatus_tab = lt_userstatus it_partner_tab = lt_partner it_partner_up_tab = lt_partner_up it_operation_tab = lt_afvgd it_operation_up_tab = lt_afvgd_up it_relation_tab = lt_afabd it_relation_up_tab = lt_afabd_up it_component_tab = lt_resbd it_component_up_tab = lt_resbd_up it_objectlist_tab = lt_riwol it_objectlist_up_tab = lt_riwol_up it_olist_relation_tab = lt_olist_relation it_cobl_tab = lt_cobl it_cobl_up_tab = lt_cobl_up it_text_tab = lt_text it_text_lines_tab = lt_text_lines it_tasklists = lt_tasklists it_extension_up = lt_extension_up " Note 1989741 it_reforder_item = lt_afpod it_reforder_item_up = lt_afpod_up it_reforder_comp = lt_afpod_resbd it_reforder_comp_up = lt_afpod_resbd_up it_reforder_operation = lt_reford_afvgd it_reforder_serno_olist_ins = lt_serno_olist_ins it_reforder_serno_olist_del = lt_serno_olist_del it_prt = lt_prt it_prt_up = lt_prt_up it_serviceoutline = lt_serviceoutline it_serviceoutline_up = lt_serviceoutline_up it_servicelines = lt_servicelines it_servicelines_up = lt_servicelines_up it_servicelimit = lt_servicelimit it_servicelimit_up = lt_servicelimit_up it_servicecontractlimits = lt_servicecontractlimits it_servicecontractlimits_up = lt_servicecontractlimits_up it_permit = lt_permit it_permit_up = lt_permit_up it_permit_issue = lt_permit_issue iv_mmsrv_external_maintenace = iv_mmsrv_external_maintenace it_estimated_costs = lt_est_cost " 1672966 EAMCC PM110 it_text_add_tab = lt_text_add "note 2756658 it_settlmt_profile = lt_settlmt_profile IMPORTING et_numbers = et_numbers[] et_notif_numbers = et_notification_numbers[] EXCEPTIONS data_for_method_not_found = 1 method_not_supported = 2 error_in_processing = 3 OTHERS = 4. IF sy-subrc NE 0. * Fehler &1 beim Bearbeiten der Bapi-Methoden MESSAGE e113(iwo_bapi2) INTO mess. bapi_message. * New with ERP 2005: If order headers are created BUT subsequent objects * led to an error, the order header update flag is now set to 'IGNORE' for * update processes. PERFORM reset_created_headers USING et_numbers[] lt_method_level. PERFORM end_bapi CHANGING return[]. EXIT. ENDIF. endif. "DFPS note 2304265 * Lesen des Application Logs und zurückgeben der ********** * Meldungen in die Exporttabelle ************************** PERFORM end_bapi CHANGING return[]. ENHANCEMENT-POINT bapi_alm_order_maintain_g7 SPOTS es_saplibapi_alm_order. ENDFUNCTION.

请根据下方执行计划,使用hint index ?,优化分析提升sql的查询效率,并给出最终优化后的查询sql SELECT ('01' || tc.trade_confirm_id) AS rs_id, tc.workday AS workday, NULL AS subcenter, ta.name AS trade_account_name, tc.trade_account_no AS trade_account_no, tc.trust_channel_id AS trust_channel_id, tc.ta_account_no AS ta_account_no, tc.fund_code AS fund_code, tc.confirm_amount AS amount, '01' AS accrual_id, NULL AS investor_bank_code, NULL AS investor_bank_acco_name, NULL AS investor_bank_acco_bank_branch, NULL AS investor_bank_acco_no, (CASE WHEN cr.capital_channel_id = '5' THEN SUBSTR(v.bis_serial_no, 7) WHEN cr.capital_channel_id = '2' THEN SUBSTR(v.bis_serial_no, 6) ELSE v.bis_serial_no END) AS request_serial_no, '156' AS currency, tr.station_id AS station_id, (CASE WHEN tr.business_type = 'T422' THEN (CASE (SELECT pd.type FROM pd_fund pd WHERE pd.fund_code = tr.target_fund_code) WHEN '10' THEN NVL(tc.return_channel_id, '8') ELSE 'y' END) WHEN tc.return_channel_id in ('7a', '8a') THEN NVL(tb.return_channel_id, pc.pay_channel_id) ELSE NVL(tc.return_channel_id, pc.pay_channel_id) END) AS ccs_capital_method, ca.bank_branch_code AS bank_firm_no, NULL AS seller_account_id, v.business_time AS business_time, (SELECT t.target_value FROM fw_map t WHERE t.map_group = 'CUSTOMER_TYPE_OTS_CCS' AND t.source_value = ta.customer_type_id) AS customer_type_id, NULL AS business_aided_code, NULL AS remit_status, v.bank_serial_no AS opposite_serial_no, tc.target_fund_code AS opposite_fund_code, NULL AS source_request_capital_method, tc.confirm_no AS keep_field, TO_DATE('2025-09-03', 'YYYY-MM-DD') AS exec_workday, tc.confirm_no AS ta_confirm_no, NULL AS IS_TRANSFERED, NULL AS CCS_ACCOUNT_ID, NULL AS TRADE_BUSINESS_TIME, TC.TA_CODE AS TA_CODE, NULL AS ta_confirm_code, TO_CHAR(tc.buy_transfer_date, 'yyyyMMdd') AS loan_date, '02' AS batch_no, tc.trade_request_id AS application_sheet_id, (CASE WHEN tr.business_type = 'TI22' THEN tr.source_request_id ELSE tr.trade_request_id END) AS request_group_id FROM (SELECT TTB.TRADE_BUSINESS_ID TRADE_CONFIRM_ID, 'T' || TTB.BUSINESS_TYPE BUSINESS_TYPE, TTB.TRADE_REQUEST_ID TRADE_REQUEST_ID, TTB.CONFIRM_NO CONFIRM_NO, TTB.TA_ACCOUNT_NO TA_ACCOUNT_NO, TTB.TRADE_ACCOUNT_NO TRADE_ACCOUNT_NO, TTB.TRUST_CHANNEL_ID TRUST_CHANNEL_ID, TTB.PAYMENT_CHANNEL_ID, TTB.FUND_CODE FUND_CODE, TTB.CONFIRM_STATE CONFIRM_STATE, TTB.APPLICATION_AMOUNT APPLICATION_AMOUNT, TTB.CONFIRM_AMOUNT CONFIRM_AMOUNT, TTB.CONFIRM_INTEREST CONFIRM_INTEREST, TTB.TRANSFER_AMOUNT, TTB.WORKDAY WORKDAY, TTB.RETURN_CHANNEL_ID RETURN_CHANNEL_ID, TTB.RETURN_CHANNEL_ACCOUNT_NO RETURN_CHANNEL_ACCOUNT_NO, TTB.TA_CODE TA_CODE, TTB.REDEEM_CAPITAL_RECEIVE_DAYS REDEEM_CAPITAL_RECEIVE_DAYS, TTB.BUY_CONFIRM_RETURN_DAYS BUY_CONFIRM_RETURN_DAYS, TTB.BUY_TRANSFER_DATE BUY_TRANSFER_DATE, TTB.TARGET_FUND_CODE TARGET_FUND_CODE, TTB.REQUEST_GROUP_ID REQUEST_GROUP_ID FROM TR_TRADE_BUSINESS TTB WHERE TTB.BUSINESS_CATEGORY = '30' AND TTB.BUSINESS_TYPE <> '143' AND TTB.WORKDAY >= TO_DATE('2025-09-03', 'YYYY-MM-DD') AND TTB.WORKDAY < TO_DATE('2025-09-03', 'YYYY-MM-DD') + 1 AND (TTB.TA_CODE = '02' or TTB.TA_CODE = '04' or TTB.TA_CODE = '05' or TTB.TA_CODE = '06' or TTB.TA_CODE = '08' or TTB.TA_CODE = '09' or TTB.TA_CODE = '0A' or TTB.TA_CODE = '0F' or TTB.TA_CODE = '0Q' or TTB.TA_CODE = '0W' or TTB.TA_CODE = '0Z' or TTB.TA_CODE = '12' or TTB.TA_CODE = '15' or TTB.TA_CODE = '16' or TTB.TA_CODE = '17' or TTB.TA_CODE = '1L' or TTB.TA_CODE = '1M' or TTB.TA_CODE = '1N' or TTB.TA_CODE = '20' or TTB.TA_CODE = '21' or TTB.TA_CODE = '23' or TTB.TA_CODE = '25' or TTB.TA_CODE = '27' or TTB.TA_CODE = '29' or TTB.TA_CODE = '2E' or TTB.TA_CODE = '30' or TTB.TA_CODE = '32' or TTB.TA_CODE = '33' or TTB.TA_CODE = '34' or TTB.TA_CODE = '36' or TTB.TA_CODE = '37' or TTB.TA_CODE = '39' or TTB.TA_CODE = '3J' or TTB.TA_CODE = '3K' or TTB.TA_CODE = '3M' or TTB.TA_CODE = '3Q' or TTB.TA_CODE = '3Z' or TTB.TA_CODE = '40' or TTB.TA_CODE = '42' or TTB.TA_CODE = '46' or TTB.TA_CODE = '47' or TTB.TA_CODE = '49' or TTB.TA_CODE = '4C' or TTB.TA_CODE = '4T' or TTB.TA_CODE = '4U' or TTB.TA_CODE = '4Z' or TTB.TA_CODE = '53' or TTB.TA_CODE = '55' or TTB.TA_CODE = '57' or TTB.TA_CODE = '58' or TTB.TA_CODE = '5C' or TTB.TA_CODE = '5D' or TTB.TA_CODE = '5L' or TTB.TA_CODE = '5R' or TTB.TA_CODE = '60' or TTB.TA_CODE = '62' or TTB.TA_CODE = '63' or TTB.TA_CODE = '67' or TTB.TA_CODE = '69' or TTB.TA_CODE = '6E' or TTB.TA_CODE = '6F' or TTB.TA_CODE = '6K' or TTB.TA_CODE = '70' or TTB.TA_CODE = '74' or TTB.TA_CODE = '75' or TTB.TA_CODE = '76' or TTB.TA_CODE = '7B' or TTB.TA_CODE = '81' or TTB.TA_CODE = '94' or TTB.TA_CODE = '95' or TTB.TA_CODE = 'B0' or TTB.TA_CODE = 'C4' or TTB.TA_CODE = 'CJ' or TTB.TA_CODE = 'H0' or TTB.TA_CODE = 'SP' or TTB.TA_CODE = 'B6' or TTB.TA_CODE = '0')) tc LEFT JOIN tr_trade_business tb ON tc.trade_request_id = tb.trade_business_id LEFT JOIN tr_business_relation br ON br.atom_business_id = tc.trade_request_id LEFT JOIN tr_trade_request tr ON tr.trade_request_id = br.business_id LEFT JOIN ac_trade_account ta ON ta.trade_account_no = tc.trade_account_no LEFT JOIN ac_return_account_latest cu ON tc.trade_account_no = cu.trade_account_no AND tc.PAYMENT_CHANNEL_ID = cu.trust_channel_id LEFT JOIN ac_current_account ca ON cu.current_account_id = ca.current_account_id LEFT JOIN ac_payment_channel pc ON pc.payment_channel_id = tc.PAYMENT_CHANNEL_ID LEFT JOIN ca_voucher v ON v.trade_request_id = tc.trade_request_id LEFT JOIN ca_channel_relation cr ON cr.channel_relation_id = v.channel_relation_id WHERE (tc.business_type = 'T122' OR tc.business_type = 'T139' OR tc.business_type = 'T191') AND tc.confirm_amount <> 0 AND tc.workday >= TO_DATE('2025-09-03', 'YYYY-MM-DD') AND tc.workday < TO_DATE('2025-09-03', 'YYYY-MM-DD') + 1 执行计划 Description 对象所有者 对象名称 耗费 基数 字节 SELECT STATEMENT, GOAL = ALL_ROWS 14,906 3 1,413 TABLE ACCESS BY INDEX ROWID WOTS PD_FUND 2 1 10 INDEX UNIQUE SCAN WOTS PK_PD_FUND 1 1 INDEX RANGE SCAN WOTS FW_TRANSLATE_IX1 2 1 33 NESTED LOOPS OUTER 14,906 3 1,413 NESTED LOOPS OUTER 14,897 3 1,326 NESTED LOOPS OUTER 14,891 3 1,134 HASH JOIN OUTER 14,887 3 1,032 NESTED LOOPS OUTER 14,884 3 1,008 NESTED LOOPS OUTER 14,882 3 855 HASH JOIN OUTER 14,879 3 660 NESTED LOOPS OUTER 12,802 3 570 NESTED LOOPS OUTER 12,799 3 507 TABLE ACCESS BY INDEX ROWID WOTS TR_TRADE_BUSINESS 12,798 3 456 INDEX RANGE SCAN WOTS TR_TRADE_BUSINESS_IX6 333 60,843 TABLE ACCESS BY INDEX ROWID WOTS AC_PAYMENT_CHANNEL 1 1 17 INDEX UNIQUE SCAN WOTS PK_AC_PAYMENT_CHANNEL 0 1 INDEX RANGE SCAN WOTS IDX_AC_TRADE_ACCOUNT_2 1 1 21 VIEW WOTS AC_RETURN_ACCOUNT_LATEST 2,077 125,458 3,763,740 NESTED LOOPS OUTER 2,077 125,458 6,649,274 VIEW WOTS 2,062 125,458 5,018,320 WINDOW SORT PUSHED RANK 2,062 125,458 6,649,274 TABLE ACCESS FULL WOTS AC_PAYMENT_ACCOUNT 418 125,458 6,649,274 INDEX UNIQUE SCAN WOTS PK_AC_CURRENT_ACCOUNT 0 1 13 TABLE ACCESS BY INDEX ROWID WOTS AC_CURRENT_ACCOUNT 1 1 65 INDEX UNIQUE SCAN WOTS PK_AC_CURRENT_ACCOUNT 0 1 INDEX RANGE SCAN WOTS IDX_CA_VOUCHER_6 2 1 51 VIEW WOTS index$_join$_021 2 28 224 HASH JOIN INDEX FAST FULL SCAN WOTS IDX_CA_CHANNEL_RELATION_1 1 28 224 INDEX FAST FULL SCAN WOTS PK_CA_CHANNEL_RELATION 1 28 224 TABLE ACCESS BY INDEX ROWID WOTS TR_BUSINESS_RELATION 4 1 34 INDEX RANGE SCAN WOTS IDX_TR_BUSINESS_RELATION_1 3 1 TABLE ACCESS BY INDEX ROWID WOTS TR_TRADE_REQUEST 2 1 64 INDEX UNIQUE SCAN WOTS PK_TR_TRADE_REQUEST 1 1 TABLE ACCESS BY INDEX ROWID WOTS TR_TRADE_BUSINESS 3 1 29 INDEX UNIQUE SCAN WOTS PK_TR_TRADE_BUSINESS 2 1

最新推荐

recommend-type

【scratch2.0少儿编程-游戏原型-动画-项目源码】时钟.zip

资源说明: 1:本资料仅用作交流学习参考,请切勿用于商业用途。更多精品资源请访问 https://blog.csdn.net/ashyyyy/article/details/146464041 2:一套精品实用scratch2.0少儿编程游戏、动画源码资源,无论是入门练手还是项目复用都超实用,省去重复开发时间,让开发少走弯路!
recommend-type

研究Matlab影响下的神经数值可复制性

### Matlab代码影响神经数值可复制性 #### 标题解读 标题为“matlab代码影响-neural-numerical-replicability:神经数值可复制性”,该标题暗示了研究的主题集中在Matlab代码对神经数值可复制性的影响。在神经科学研究中,数值可复制性指的是在不同计算环境下使用相同的算法与数据能够获得一致或相近的计算结果。这对于科学实验的可靠性和结果的可验证性至关重要。 #### 描述解读 描述中提到的“该项目”着重于提供工具来分析不同平台下由于数值不精确性导致的影响。项目以霍奇金-赫克斯利(Hodgkin-Huxley)型神经元组成的简单神经网络为例,这是生物物理神经建模中常见的模型,用于模拟动作电位的产生和传播。 描述中提及的`JCN_2019_v4.0_appendix_Eqs_Parameters.pdf`文件详细描述了仿真模型的参数与方程。这些内容对于理解模型的细节和确保其他研究者复制该研究是必不可少的。 该研究的实现工具选用了C/C++程序语言。这表明了研究的复杂性和对性能的高要求,因为C/C++在科学计算领域内以其高效性和灵活性而广受欢迎。 使用了Runge–Kutta四阶方法(RK4)求解常微分方程(ODE),这是一种广泛应用于求解初值问题的数值方法。RK4方法的精度和稳定性使其成为众多科学计算问题的首选。RK4方法的实现借助了Boost C++库中的`Boost.Numeric.Odeint`模块,这进一步表明项目对数值算法的实现和性能有较高要求。 #### 软件要求 为了能够运行该项目,需要满足一系列软件要求: - C/C++编译器:例如GCC,这是编译C/C++代码的重要工具。 - Boost C++库:一个强大的跨平台C++库,提供了许多标准库之外的组件,尤其是数值计算相关的部分。 - ODEint模块:用于求解常微分方程,是Boost库的一部分,已包含在项目提供的文件中。 #### 项目文件结构 从提供的文件列表中,我们可以推测出项目的文件结构包含以下几个部分: - **项目树源代码目录**:存放项目的主要源代码文件。 - `checkActualPrecision.h`:一个头文件,可能用于检测和评估实际的数值精度。 - `HH_BBT2017_allP.cpp`:源代码文件,包含用于模拟霍奇金-赫克斯利神经元网络的代码。 - `iappDist_allP.cpp` 和 `iappDist_allP.h`:源代码和头文件,可能用于实现某种算法或者数据的分布。 - `Makefile.win`:针对Windows系统的编译脚本文件,用于自动化编译过程。 - `SpikeTrain_allP.cpp` 和 `SpikeTrain_allP.h`:源代码和头文件,可能与动作电位的生成和传播相关。 - **人物目录**:可能包含项目成员的简介、联系方式或其他相关信息。 - **Matlab脚本文件**: - `图1_as.m`、`图2_as.m`、`图2_rp`:这些文件名中的"as"可能表示"assembled",而"rp"可能指"reproduction"。这些脚本文件很可能用于绘制图表、图形,以及对模拟结果进行后处理和复现实验。 #### 开源系统标签 标签“系统开源”指的是该项目作为一个开源项目被开发,意味着其源代码是公开的,任何个人或组织都可以自由获取、修改和重新分发。这对于科学计算来说尤为重要,因为开放代码库可以增进协作,加速科学发现,并确保实验结果的透明度和可验证性。 #### 总结 在理解了文件中提供的信息后,可以认识到本项目聚焦于通过提供准确的数值计算工具,来保证神经科学研究中模型仿真的可复制性。通过选择合适的编程语言和算法,利用开源的库和工具,研究者们可以确保其研究结果的精确性和可靠性。这不仅有助于神经科学领域的深入研究,还为其他需要高精度数值计算的科研领域提供了宝贵的经验和方法。
recommend-type

MySQL数据库索引失效案例分析与解决方案(索引失效大揭秘)

# 摘要 MySQL索引失效是数据库性能优化中的关键问题,直接影响查询效率与系统响应速度。本文系统分析了索引的基本机制与失效原理,包括B+树结构、执行计划解析及查询优化器的工作逻辑,深入探讨了索引失效的典型场景,如不规范SQL写法、复合索引设计不当以及统
recommend-type

TS语言

### TypeScript 简介 TypeScript 是一种由 Microsoft 开发的开源编程语言,它是 JavaScript 的超集,这意味着所有的 JavaScript 代码都是合法的 TypeScript 代码。TypeScript 扩展了 JavaScript 的语法,并通过类型注解提供编译时的静态类型检查,从而使得代码更易于维护、理解和调试。TypeScript 可以在任何操作系统上运行,并且可以编译出纯净、简洁的 JavaScript 代码,这些代码可以在任何浏览器上、Node.js 环境中,或者任何支持 ECMAScript 3(或更高版本)的 JavaScript 引
recommend-type

Leaflet.Graticule插件:创建经纬度网格刻度

标题“Leaflet.Graticule:经纬线网格”指向的是Leaflet.js的一个插件,它用于在地图上生成经纬度网格线,以辅助进行地图定位与参考。从描述中,我们可以提取到几个关键知识点: 1. Leaflet.Graticule插件的使用目的和功能:该插件的主要作用是在基于Leaflet.js库的地图上绘制经纬度网格线。这可以帮助用户在地图上直观地看到经纬度划分,对于地理信息系统(GIS)相关工作尤为重要。 2. 插件的构造函数和参数:`L.graticule(options)`是创建Graticule图层的JavaScript代码片段。其中`options`是一个对象,可以用来设置网格线的显示样式和间隔等属性。这表明了插件的灵活性,允许用户根据自己的需求调整网格线的显示。 3. interval参数的含义:`interval`参数决定了网格线的间隔大小,以度为单位。例如,若设置为20,则每20度间隔显示一条网格线;若设置为10,则每10度显示一条网格线。这一参数对于调节网格线密度至关重要。 4. style参数的作用:`style`参数用于定义网格线的样式。插件提供了自定义线的样式的能力,包括颜色、粗细等,使得开发者可以根据地图的整体风格和个人喜好来定制网格线的外观。 5. 实例化和添加到地图上的例子:提供了两种使用插件的方式。第一种是直接创建一个基本的网格层并将其添加到地图上,这种方式使用了插件的默认设置。第二种是创建一个自定义间隔的网格层,并同样将其添加到地图上。这展示了如何在不同的使用场景下灵活运用插件。 6. JavaScript标签的含义:标题中“JavaScript”这一标签强调了该插件是使用JavaScript语言开发的,它是前端技术栈中重要的部分,特别是在Web开发中扮演着核心角色。 7. 压缩包子文件的文件名称列表“Leaflet.Graticule-master”暗示了插件的项目文件结构。文件名表明,这是一个典型的GitHub仓库的命名方式,其中“master”可能代表主分支。通常,开发者可以在如GitHub这样的代码托管平台上找到该项目的源代码和文档,以便下载、安装和使用。 综上所述,可以得知,Leaflet.Graticule插件是一个专为Leaflet地图库设计的扩展工具,它允许用户添加自定义的经纬度网格线到地图上,以帮助进行地图的可视化分析。开发者可以根据特定需求通过参数化选项来定制网格线的属性,使其适应不同的应用场景。通过学习和使用该插件,可以增强地图的交互性和信息的传递效率。
recommend-type

【MySQL数据库性能提升秘籍】:揭秘性能下降幕后真凶及解决策略

# 摘要 MySQL性能问题在实际应用中普遍存在,但其表象复杂且易引发认知误区。本文系统分析了导致MySQL性能下降的核心原因,涵盖查询语句结构、数据库配置、表结构设计等多个技术层面,并结合性能监控工具与执行计划解析,提供了全面的问题诊断方法。在此基础上,文章深入探讨了索引优化、查询重写、分库分表等高级调优策略,并通过真实案例总结了可行的最佳实践
recommend-type

51小车循迹红外

基于51单片机的红外循迹小车的实现方法,主要涉及硬件连接、传感器模块的使用以及程序设计三个方面。 ### 红外循迹模块的选择与连接 红外循迹模块通常由多个红外发射和接收对管组成,用于检测地面上的黑线。常见的模块有四路红外循迹模块,其工作原理是通过检测红外光的反射强度来判断是否处于黑线上。红外模块的VCC和GND分别连接到51单片机的+5V和GND端,而IN1至IN4则连接到单片机的对应引脚上。红外发射接收器应安装在小车前方下端,并且离地面的距离不宜过远,以确保能够有效检测到黑线[^2]。 ### 硬件电路设计 在硬件设计方面,需要考虑电机驱动、电源管理、以及红外传感器的接口设计。51单片机
recommend-type

AMEF图像去雾技术:Matlab实现与应用

AMEF(Artificial Multi-Exposure Fusion)方法是一种用于图像去雾的技术,其核心思想是将多张曝光不足的图像融合成一张清晰无雾的图片。在讨论这个技术的Matlab实现之前,让我们先了解图像去雾和多重曝光融合的背景知识。 图像去雾技术的目标是恢复在雾中拍摄的图像的清晰度,增强图像的对比度和颜色饱和度,使得原本因雾气影响而模糊的图像变得清晰。这种技术在自动驾驶、无人机导航、视频监控、卫星图像处理等领域有着重要的应用。 多重曝光技术源自摄影领域,通过拍摄同一场景的多张照片,再将这些照片通过特定算法融合,获得一张综合了多张照片信息的图像。多重曝光融合技术在提高图像质量方面发挥着重要作用,例如增加图片的动态范围,提升细节和亮度,消除噪点等。 在介绍的AMEF去雾方法中,该技术被应用于通过人工创建的多重曝光图像进行融合,以产生清晰的无雾图像。由于单一图像在光照不均匀或天气条件不佳的情况下可能会产生图像质量低下的问题,因此使用多重曝光融合可以有效地解决这些问题。 在Matlab代码实现方面,AMEF的Matlab实现包括了一个名为amef_demo.m的演示脚本。用户可以通过修改该脚本中的图像名称来处理他们自己的图像。在该代码中,clip_range是一个重要的参数,它决定了在去雾处理过程中,对于图像像素亮度值的裁剪范围。在大多数实验中,该参数被设定为c=0.010,但用户也可以根据自己的需求进行调整。较大的clip_range值会尝试保留更多的图像细节,但同时也可能引入更多噪声,因此需要根据图像的具体情况做出适当选择。 AMEF方法的理论基础和实验过程均来自于Adrian Galdran在2018年发表于《信号处理》期刊的文章,题为“Image Dehazing by Artificial Multi-Exposure Image Fusion”。同时,该Matlab代码的融合部分的理论基础则来自于2007年Pacific Graphics会议记录中由Tom Mertens, Jan Kautz和Frank Van Reeth提出的工作,题目为“Exposure Fusion”。因此,如果读者在实际应用中使用了这段代码,适当的引用这些工作是必要的学术礼仪。 此外,标签“系统开源”表明了该项目遵循开源精神,允许研究者、开发者及用户自由地访问、使用、修改和共享源代码。这一特点使得AMEF方法具有广泛的可访问性和可扩展性,鼓励了更广泛的研究和应用。 从压缩包子文件的文件名称列表中,我们可以看到AMEF去雾方法的Matlab实现的项目名为“amef_dehazing-master”。这表明了这是一个有主分支的项目,其主分支被标识为“master”,这通常意味着它是项目维护者认可的稳定版本,也是用户在使用时应该选择的版本。 总的来说,AMEF去雾方法及其Matlab实现为图像处理领域提供了快速且有效的解决方案,能够在图像被雾气影响时恢复出高质量的清晰图像,这对于相关领域的研究和应用具有重要的意义。
recommend-type

泵浦光匹配建模全解析:MATLAB中耦合效率提升的4个关键点(实战案例)

# 摘要 泵浦光匹配建模在光纤激光器与光学系统设计中具有关键作用,直接影响光束耦合效率与系统整体性能。本文系统阐述了泵浦光匹配建模的基本概念与研究意义,深入分析其理论基础,包括光纤耦合原理、高斯光束传播特性及耦合效率的数学建模。基于MATLAB平台,介绍了光学仿真工具的使用与建模环境搭建方法,并提出四种关键建模策略以提升耦合效率。通过典型实例验证模型有效性
recommend-type

openshift跟k8s和docker之间的关系

### OpenShift 与 Kubernetes 和 Docker 的关系 OpenShift 是基于 Kubernetes 和 Docker 构建的一个企业级应用云平台。它通过整合 Kubernetes 的容器编排能力和 Docker 的容器引擎,提供了一套完整的云原生解决方案。 #### OpenShift 与 Kubernetes 的关系 Kubernetes 是 OpenShift 的核心组件之一,负责容器编排任务。OpenShift 基于 Kubernetes 构建,并在其基础上扩展了更多企业级功能。例如,OpenShift 引入了 BuildConfig、ImageStre