• 验证输入的物料单位是否正确


    1. 首先找到物料的主单位及是否可以进行单位换算。

    SELECT PRIMARY_UOM_CODE,
             ALLOWED_UNITS_LOOKUP_CODE
      FROM mtl_system_items     msi,
             MTL_UNITS_OF_MEASURE MTLUOM2
     WHERE msi.ORGANIZATION_ID = &107
        AND msi.INVENTORY_ITEM_ID = &1399007
        AND MTLUOM2.uom_code = msi.PRIMARY_UOM_CODE
        AND NVL(MTLUOM2.DISABLE_DATE, TRUNC(SYSDATE) + 1) > TRUNC(SYSDATE);
     

    2. 在标准换算率中查找是否有对应的单位。

    --如MM -> CM -> M
    SELECT MTLUOM2.uom_code,
             MTLUCV.uom_class
      FROM MTL_UNITS_OF_MEASURE MTLUOM2,
             MTL_UOM_CONVERSIONS  MTLUCV,
             MTL_UOM_CLASSES      MTLCLS
     WHERE MTLUOM2.uom_code = &L_UOM_CODE --'CM'
        AND MTLUCV.uom_code = MTLUOM2.uom_code
        AND MTLUCV.inventory_item_id = 0
        AND MTLCLS.uom_class = MTLUOM2.uom_class
        AND NVL(MTLCLS.DISABLE_DATE, TRUNC(SYSDATE) + 1) > TRUNC(SYSDATE)
        AND NVL(MTLUCV.DISABLE_DATE, TRUNC(SYSDATE) + 1) > TRUNC(SYSDATE)
        AND NVL(MTLUOM2.DISABLE_DATE, TRUNC(SYSDATE) + 1) > TRUNC(SYSDATE)
        AND MTLUCV.uom_class =
             (SELECT MTLPRI1.uom_class
                 FROM MTL_UNITS_OF_MEASURE MTLPRI1
                WHERE MTLPRI1.uom_code = &primary_uom_code --'M'
                  AND NVL(MTLPRI1.DISABLE_DATE, TRUNC(SYSDATE) + 1) > TRUNC(SYSDATE));
     3. 在同类别单位列表中查找是否有对应单位
    SELECT MTLUOM2.uom_code,
             MTLUCV.uom_class
      FROM MTL_UNITS_OF_MEASURE MTLUOM2,
             MTL_UOM_CONVERSIONS  MTLUCV,
             MTL_UOM_CLASSES      MTLCLS
     WHERE /*MTLUOM2.uom_code = &p_uom_code
        AND*/ MTLUCV.uom_code = MTLUOM2.uom_code
        AND MTLUCV.inventory_item_id = &p_item_id
        AND MTLCLS.uom_class = MTLUOM2.uom_class
        AND NVL(MTLCLS.DISABLE_DATE, TRUNC(SYSDATE) + 1) > TRUNC(SYSDATE)
        AND NVL(MTLUOM2.DISABLE_DATE, TRUNC(SYSDATE) + 1) > TRUNC(SYSDATE)
        AND NVL(MTLUCV.DISABLE_DATE, TRUNC(SYSDATE) + 1) > TRUNC(SYSDATE);
     

    4. 复杂的查找。除了以上情况外,在不同类别的转换关系中查找是否有对应的单位

    SELECT MTLUOM2.uom_code,
             MTLUOM2.uom_class
      FROM MTL_UNITS_OF_MEASURE MTLUOM2,
             MTL_UOM_CONVERSIONS  MTLUCV,
             MTL_UOM_CLASSES      MTLCLS
     WHERE MTLUOM2.uom_code = p_uom_code
        AND MTLUCV.uom_code = MTLUOM2.uom_code
        AND MTLCLS.uom_class = MTLUOM2.uom_class
        AND NVL(MTLCLS.DISABLE_DATE, TRUNC(SYSDATE) + 1) > TRUNC(SYSDATE)
        AND NVL(MTLUOM2.DISABLE_DATE, TRUNC(SYSDATE) + 1) > TRUNC(SYSDATE)
        AND NVL(MTLUCV.DISABLE_DATE, TRUNC(SYSDATE) + 1) > TRUNC(SYSDATE)
        AND l_allowed_units IN (1, 3)
        AND MTLUCV.inventory_item_id = p_item_id
    UNION ALL
    SELECT MTLUOM2.uom_code,
             MTLUOM2.uom_class
      FROM MTL_UNITS_OF_MEASURE MTLUOM2,
             MTL_UOM_CONVERSIONS  MTLUCV,
             MTL_UOM_CLASSES      MTLCLS
     WHERE MTLUOM2.uom_code = p_uom_code
        AND MTLUCV.uom_code = MTLUOM2.uom_code
        AND MTLCLS.uom_class = MTLUOM2.uom_class
        AND NVL(MTLCLS.DISABLE_DATE, TRUNC(SYSDATE) + 1) > TRUNC(SYSDATE)
        AND NVL(MTLUOM2.DISABLE_DATE, TRUNC(SYSDATE) + 1) > TRUNC(SYSDATE)
        AND NVL(MTLUCV.DISABLE_DATE, TRUNC(SYSDATE) + 1) > TRUNC(SYSDATE)
        AND l_allowed_units IN (1, 3)
        AND MTLUCV.inventory_item_id = 0
        AND MTLUCV.uom_class =
             (SELECT MTLPRI1.uom_class
                 FROM MTL_UNITS_OF_MEASURE MTLPRI1
                WHERE MTLPRI1.uom_code = l_primary_uom_code)
    UNION ALL
    SELECT MTLUOM2.uom_code,
             MTLUOM2.uom_class
      FROM MTL_UNITS_OF_MEASURE MTLUOM2,
             MTL_UOM_CONVERSIONS  MTLUCV,
             MTL_UOM_CLASSES      MTLCLS
     WHERE MTLUOM2.uom_code = p_uom_code
        AND MTLUCV.uom_code = MTLUOM2.uom_code
        AND MTLCLS.uom_class = MTLUOM2.uom_class
        AND NVL(MTLCLS.DISABLE_DATE, TRUNC(SYSDATE) + 1) > TRUNC(SYSDATE)
        AND NVL(MTLUOM2.DISABLE_DATE, TRUNC(SYSDATE) + 1) > TRUNC(SYSDATE)
        AND NVL(MTLUCV.DISABLE_DATE, TRUNC(SYSDATE) + 1) > TRUNC(SYSDATE)
        AND l_allowed_units IN (1, 3)
        AND MTLUCV.inventory_item_id = 0
        AND EXISTS
     (SELECT 'UOM_CLASS conversion exists for the class of UOM supplied'
                 FROM MTL_UOM_CLASS_CONVERSIONS MTLUCC1
                WHERE MTLUCC1.to_uom_class = MTLUCV.uom_class
                  AND MTLUCC1.inventory_item_id = p_item_id
                  AND NVL(MTLUCC1.DISABLE_DATE, TRUNC(SYSDATE) + 1) > TRUNC(SYSDATE))
    UNION ALL
    SELECT MTLUOM2.uom_code,
             MTLUOM2.uom_class
      FROM MTL_UNITS_OF_MEASURE MTLUOM2,
             MTL_UOM_CONVERSIONS  MTLUCV,
             MTL_UOM_CLASSES      MTLCLS
     WHERE MTLUOM2.uom_code = p_uom_code
        AND MTLUCV.uom_code = MTLUOM2.uom_code
        AND MTLCLS.uom_class = MTLUOM2.uom_class
        AND NVL(MTLCLS.DISABLE_DATE, TRUNC(SYSDATE) + 1) > TRUNC(SYSDATE)
        AND NVL(MTLUOM2.DISABLE_DATE, TRUNC(SYSDATE) + 1) > TRUNC(SYSDATE)
        AND NVL(MTLUCV.DISABLE_DATE, TRUNC(SYSDATE) + 1) > TRUNC(SYSDATE)
        AND l_allowed_units IN (2, 3)
        AND MTLUCV.inventory_item_id = 0
        AND EXISTS
     (SELECT 'UOM_CLASS conversion exists for the class of UOM supplied'
                 FROM MTL_UOM_CLASS_CONVERSIONS MTLUCC
                WHERE MTLUCC.to_uom_class = MTLUCV.uom_class
                  AND MTLUCC.INVENTORY_ITEM_ID = p_item_id
                  AND NVL(MTLUCC.DISABLE_DATE, TRUNC(SYSDATE) + 1) > TRUNC(SYSDATE))
    UNION ALL
    SELECT MTLUOM2.uom_code,
             MTLUOM2.uom_class
      FROM MTL_UNITS_OF_MEASURE MTLUOM2,
             MTL_UOM_CONVERSIONS  MTLUCV,
             MTL_UOM_CLASSES      MTLCLS
     WHERE MTLUOM2.uom_code = p_uom_code
        AND MTLUCV.uom_code = MTLUOM2.uom_code
        AND MTLCLS.uom_class = MTLUOM2.uom_class
        AND NVL(MTLCLS.DISABLE_DATE, TRUNC(SYSDATE) + 1) > TRUNC(SYSDATE)
        AND NVL(MTLUOM2.DISABLE_DATE, TRUNC(SYSDATE) + 1) > TRUNC(SYSDATE)
        AND NVL(MTLUCV.DISABLE_DATE, TRUNC(SYSDATE) + 1) > TRUNC(SYSDATE)
        AND l_allowed_units IN (2, 3)
        AND MTLUCV.inventory_item_id = 0
        AND MTLUCV.uom_class =
             (SELECT MTLPRI.uom_class
                 FROM MTL_UNITS_OF_MEASURE MTLPRI
                WHERE MTLPRI.uom_code = l_primary_uom_code);

    oracle判断单位是否填入正确的标准函数:

    inv_convert.validate_item_uom(p_uom_code IN VARCHAR2,
                    p_item_id  IN NUMBER,
                    p_organization_id IN NUMBER);

             

                成长

           /      |     \

        学习   总结   分享

    QQ交流群:122230156

  • 相关阅读:
    percona-toolkit
    使用pt-query-digest,找到不是很合适的sql
    linux_添加定时任务,每5min清理下某个文件夹下的文件
    dotTrace快速帮助你定位C#代码的性能瓶颈
    性能测试问题_tomcat占用内存很高,响应速度很慢
    性能分析_linux服务器CPU_中断
    性能分析_linux服务器CPU_CPU利用率
    性能分析_linux服务器CPU_Load Average
    LR_问题_虚拟用户以进程和线程模式运行的区别
    truncate,delete,drop的区别
  • 原文地址:https://www.cnblogs.com/benio/p/2174749.html
Copyright © 2020-2023  润新知