EBS12.1: 优化SQL查询过程

用户反馈一个报表突然变得很慢,查一个月数据 一天也不会显示出来(日志得知运行5小时了)。

我对该报表进行分析,

分析点1: 主查询语句共有5个UNION ALL 段,每个段中使用6个自定义函数

分析点2: 使用outer join 连接, 每段中都有外连接3~5个表(共同表与条件)

分析点3: 4个主数据表超千万行记录,外连接 数据表也近千万行记录。

分析点4:通过执行计划分析,执行计划内容不能充分反映慢的原因。另外几百行记录的表以全表后扫描一个,只是每段UNION 一次。

处理方式: 

1、将自定义函数用VIEW代替

2、抽取每段中外连接表到最外层

3、HINT方式指定索引顺序

4、创建索引或重建索引。 

效果:

40秒钟,在PLSQL DEVELOPER中显示结果。

10分钟导出 600MB数据(约65万行记录)EXCEL文件。 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
好的,以下是一个简单的DECLARE示例,用于在ORACLE EBS 12.1.0.2.0版本中处理物料搬运单,并自动生成分配行: ``` DECLARE l_header_id NUMBER; l_line_id NUMBER; l_shipment_id NUMBER; l_qty_shipped NUMBER; BEGIN -- 在此处添加您的代码,用于获取物料搬运单头ID(l_header_id)和行ID(l_line_id) -- 获取物料搬运单头ID和行ID后,使用API进行物料搬运单处理 l_shipment_id := wsh_delivery_details_pub.ship_confirm_deliveries( p_delivery_id => l_header_id, p_delivery_assignment_id => l_line_id, p_shipment_number => NULL, p_transaction_header_id => NULL, p_transaction_line_id => NULL, p_shipped_quantity => l_qty_shipped, p_return_status => NULL, p_error_msg => NULL ); -- 如果物料搬运单处理成功,则自动生成分配行 IF l_shipment_id IS NOT NULL THEN wsh_delivery_assignments_pub.create_delivery_assignment( p_delivery_id => l_header_id, p_delivery_assignment_id => l_line_id, p_shipment_id => l_shipment_id, p_transaction_header_id => NULL, p_transaction_line_id => NULL, p_quantity => l_qty_shipped, p_error_msg => NULL ); END IF; END; ``` 在此示例中,我们使用ORACLE EBS提供的API `wsh_delivery_details_pub.ship_confirm_deliveries` 来处理物料搬运单,并将处理结果赋值给变量 `l_shipment_id`。如果物料搬运单处理成功,则使用 `wsh_delivery_assignments_pub.create_delivery_assignment` API自动生成分配行。 当然,这只是一个简单的示例,实际情况下,您需要根据您的具体业务需求进行进一步的开发和调试。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值