物料失效验证的待定事务
2013-10-22 19:51
113 查看
最近一个项目MTL_SYSTEM_ITEMS_B表有70,000,000条记录。 用API inv_item_grp.update_item失效起来巨慢,平均2分钟一个物料。
为此看了看oracle验证的东西,想直接把他验证的事务处理处理完毕后直接更新表或者更改标准API,去掉更新验证的东西,让失效能很快的达到目的。
通过研究,在处理完待定事物处理之后,以下是2个快速失效方案:
1. 直接更新MTL_SYSTEM_ITEMS_B, 确定可行率:80% ,需更新11个字段, 效率:最快捷
2. 更改INVUPD2B.update_validations,在begin后添加代码 return 0;, 确定可行率:99%, 效率: 较为快捷
详细的研究过程就不发了,复制到CSDN超级困难。
发一下oracle对于失效检测的待定事务处理(版本R12.1.3):
--前台后台都判断,参见inv_attribute_control_pvt.transactable_uncheck
SELECT COUNT(1)
INTO l_org_count
FROM wsh_delivery_details
WHERE inventory_item_id = p_item_id
AND pickable_flag = 'Y'
--Bug 4643978 - Perf fix
AND inv_interfaced_flag IN ('N', 'P')
--and source_code = 'OE'
AND released_status <> 'D'
AND organization_id = p_org_id
AND rownum = 1;
SELECT COUNT(1)
INTO l_org_count
FROM oe_order_lines_all
WHERE source_type_code = 'EXTERNAL'
AND open_flag = 'Y'
AND nvl(shipped_quantity, 0) = 0
AND item_type_code IN ('MODEL', 'STANDARD', 'OPTION')
AND flow_status_code = 'AWAITING_RECEIPT'
AND inventory_item_id = p_item_id
AND ship_from_org_id = p_org_id
AND rownum = 1;
SELECT COUNT(1)
INTO l_org_count
FROM oe_order_lines_all l
WHERE booked_flag = 'Y'
AND nvl(shipped_quantity, 0) = 0
AND inventory_item_id = p_item_id
AND open_flag = 'Y'
AND ship_from_org_id = p_org_id
AND EXISTS (SELECT 1
FROM mtl_transactions_interface
WHERE trx_source_line_id = l.line_id
AND transaction_source_type_id IN (2, 8)
AND source_code = 'ORDER ENTRY')
AND rownum = 1;
SELECT COUNT(1)
INTO l_org_count
FROM mtl_supply
WHERE item_id = p_item_id
AND to_organization_id = p_org_id
AND rownum = 1;
--仅仅前台,参见INVIDIT3.table_queries
mtl_onhand_quantities_detail
mtl_material_transactions_temp
mtl_demand
--前后台都检查,参见INV_ATTRIBUTE_CONTROL_PVT.check_pending_adjustments
SELECT COUNT(1)
INTO l_org_count
FROM mtl_cycle_count_entries
WHERE inventory_item_id = p_item_id
AND organization_id = p_org_id
AND
/*Change for bug 8208397*/ /*Check should be for status1-Uncounted/2-Pending Approval/3-Recount*/
/*entry_status_code = 2 and*/
entry_status_code IN (1, 2, 3)
AND rownum = 1;
IF (l_org_count <> 1) THEN
SELECT COUNT(1)
INTO l_org_count
FROM mtl_physical_adjustments
WHERE inventory_item_id = p_item_id
AND organization_id = p_org_id
AND approval_status = 1
AND adjustment_quantity <> 0
AND rownum = 1;
END IF;
--INVUPD2B.update_validations的5171,失效也检查这个
SELECT 'Y'
INTO l_vmiorconsign_flag
FROM po_approved_supplier_list pasl,
po_asl_attributes paa,
po_asl_status_rules pasr
WHERE pasl.item_id = p_item_id
AND pasl.using_organization_id IN (-1, p_organization_id)
AND pasl.asl_id = paa.asl_id
AND pasr.business_rule = '2_SOURCING'
AND pasr.allow_action_flag = 'Y'
AND pasr.status_id = pasl.asl_status_id
AND (disable_flag IS NULL OR disable_flag = 'N')
AND paa.using_organization_id =
(SELECT MAX(paa2.using_organization_id)
FROM po_asl_attributes paa2
WHERE paa2.asl_id = pasl.asl_id
AND paa2.using_organization_id IN (-1, p_organization_id))
AND (paa.consigned_from_supplier_flag = 'Y' OR paa.enable_vmi_flag ='Y')
AND rownum = 1;
bom_item_type 不能等于 5
为此看了看oracle验证的东西,想直接把他验证的事务处理处理完毕后直接更新表或者更改标准API,去掉更新验证的东西,让失效能很快的达到目的。
通过研究,在处理完待定事物处理之后,以下是2个快速失效方案:
1. 直接更新MTL_SYSTEM_ITEMS_B, 确定可行率:80% ,需更新11个字段, 效率:最快捷
2. 更改INVUPD2B.update_validations,在begin后添加代码 return 0;, 确定可行率:99%, 效率: 较为快捷
详细的研究过程就不发了,复制到CSDN超级困难。
发一下oracle对于失效检测的待定事务处理(版本R12.1.3):
--前台后台都判断,参见inv_attribute_control_pvt.transactable_uncheck
SELECT COUNT(1)
INTO l_org_count
FROM wsh_delivery_details
WHERE inventory_item_id = p_item_id
AND pickable_flag = 'Y'
--Bug 4643978 - Perf fix
AND inv_interfaced_flag IN ('N', 'P')
--and source_code = 'OE'
AND released_status <> 'D'
AND organization_id = p_org_id
AND rownum = 1;
SELECT COUNT(1)
INTO l_org_count
FROM oe_order_lines_all
WHERE source_type_code = 'EXTERNAL'
AND open_flag = 'Y'
AND nvl(shipped_quantity, 0) = 0
AND item_type_code IN ('MODEL', 'STANDARD', 'OPTION')
AND flow_status_code = 'AWAITING_RECEIPT'
AND inventory_item_id = p_item_id
AND ship_from_org_id = p_org_id
AND rownum = 1;
SELECT COUNT(1)
INTO l_org_count
FROM oe_order_lines_all l
WHERE booked_flag = 'Y'
AND nvl(shipped_quantity, 0) = 0
AND inventory_item_id = p_item_id
AND open_flag = 'Y'
AND ship_from_org_id = p_org_id
AND EXISTS (SELECT 1
FROM mtl_transactions_interface
WHERE trx_source_line_id = l.line_id
AND transaction_source_type_id IN (2, 8)
AND source_code = 'ORDER ENTRY')
AND rownum = 1;
SELECT COUNT(1)
INTO l_org_count
FROM mtl_supply
WHERE item_id = p_item_id
AND to_organization_id = p_org_id
AND rownum = 1;
--仅仅前台,参见INVIDIT3.table_queries
mtl_onhand_quantities_detail
mtl_material_transactions_temp
mtl_demand
--前后台都检查,参见INV_ATTRIBUTE_CONTROL_PVT.check_pending_adjustments
SELECT COUNT(1)
INTO l_org_count
FROM mtl_cycle_count_entries
WHERE inventory_item_id = p_item_id
AND organization_id = p_org_id
AND
/*Change for bug 8208397*/ /*Check should be for status1-Uncounted/2-Pending Approval/3-Recount*/
/*entry_status_code = 2 and*/
entry_status_code IN (1, 2, 3)
AND rownum = 1;
IF (l_org_count <> 1) THEN
SELECT COUNT(1)
INTO l_org_count
FROM mtl_physical_adjustments
WHERE inventory_item_id = p_item_id
AND organization_id = p_org_id
AND approval_status = 1
AND adjustment_quantity <> 0
AND rownum = 1;
END IF;
--INVUPD2B.update_validations的5171,失效也检查这个
SELECT 'Y'
INTO l_vmiorconsign_flag
FROM po_approved_supplier_list pasl,
po_asl_attributes paa,
po_asl_status_rules pasr
WHERE pasl.item_id = p_item_id
AND pasl.using_organization_id IN (-1, p_organization_id)
AND pasl.asl_id = paa.asl_id
AND pasr.business_rule = '2_SOURCING'
AND pasr.allow_action_flag = 'Y'
AND pasr.status_id = pasl.asl_status_id
AND (disable_flag IS NULL OR disable_flag = 'N')
AND paa.using_organization_id =
(SELECT MAX(paa2.using_organization_id)
FROM po_asl_attributes paa2
WHERE paa2.asl_id = pasl.asl_id
AND paa2.using_organization_id IN (-1, p_organization_id))
AND (paa.consigned_from_supplier_flag = 'Y' OR paa.enable_vmi_flag ='Y')
AND rownum = 1;
bom_item_type 不能等于 5
相关文章推荐
- 一次想不到的Spring事务失效问题跟踪(事务不会滚)
- Java 利用SWFUpload多文件上传 session 为空失效,不能验证的问题
- Spring事务失效的原因
- 验证控件颜色失效
- spring + springMVC声明式事务失效问题
- mysql 事务 rollback 失效
- Spring MVC @Transactional注解方式事务失效的解决办法
- 终于找到全annotation配置springMVC的方法了(事务不失效)
- ASP.NET使用表单验证在注销后使得浏览器后退按钮失效的简单方法
- Spring Jersey Mybatis Aop transaction事务失效解决方案SpringManagedTransaction will not be managed by Spring
- SpringMVC+Hibernate4 导致事务失效不提交的可能原因
- SpringMVC事务失效的解决方法
- PROFILE - 库存:物料状态支持 控制【物料状态定义】禁止的事务处理
- ASP.NET 4.0: 请求验证模式变化导致ValidateRequest=false失效
- SAP中如何查生产订单(已知物料求生产订单:事务码COOIS)
- requestValidationMode 导致 ValidateRequest=False 失效或者ASP.NET 4.0事件消息: 发生了验证错误;检测到有潜在危险的Request.Form值
- 验证mysql的自动提交事务和手动提交事务(java版)
- ASP.NET在IE10,IE11中Form表单身份验证失效问题解决方法
- JPA中事务失效
- 让office验证再次失效。