利用Oracle 11i E-Business之API展BOM应用实例

来源:互联网 发布:淘宝报名活动大全 编辑:程序博客网 时间:2024/04/28 18:08

-- BOM Explosion with Oracle API
SET HEA ON
SET ECHO OFF
SET VERIFY OFF
SET FEEDBACK OFF
SET PAUSE OFF
SET PAGES 3000
SET LINES 5000
SET COLSEP";"
SET HEADSEP ";"
SET SERVEROUTPUT ON SIZE 1000000
SPOOL C:/aaa.txt

DECLARE

    v_org_code              mtl_parameters.organization_code%TYPE := '&1' ;
    v_item                  mtl_system_items.segment1%TYPE := '&2';

    l_grp_id                NUMBER                  ;
    l_session_id            NUMBER                  ;
    l_org_id_s              NUMBER                  ;
    l_levels_to_explode     NUMBER  DEFAULT 20      ;
    l_module                NUMBER  DEFAULT 2       ; -- BOM = 2
    l_cst_type_id           NUMBER  DEFAULT 0       ; -- All cost = -1 else 0
    l_item_id               NUMBER                  ;
    l_bom_or_eng      NUMBER           ;
    l_using_req_quantity NUMBER            ;
    l_using_ass_dem_DATE DATE           ;
    l_rev_DATE              VARCHAR2(20)            ;
    l_err_msg               VARCHAR2(250)           ;
    l_error_code            NUMBER                  ;

    v_top_item              VARCHAR2(20)            ;
    v_assembly_item         VARCHAR2(20)            ;
    v_component_item        VARCHAR2(20)            ;
    v_organization_id       mtl_system_items.organization_id%TYPE;
    v_inventory_item_id     mtl_system_items.inventory_item_id%TYPE;
    v_cnt                   NUMBER                  ;

    CURSOR exploded_items
    IS
    SELECT
    group_id,
    top_item_id,
    assembly_item_id,
    component_item_id,
    organization_id,
    sort_order,
    plan_level,
       component_quantity,
       extended_quantity
    FROM
    bom_explosion_temp
    WHERE   group_id=l_grp_id
    AND nvl(disable_DATE, SYSDATE)>=SYSDATE
    ORDER BY item_num,operation_seq_num
    ;

BEGIN

    SELECT organization_id
    INTO   l_org_id_s
    FROM   mtl_parameters
    WHERE  1=1
      AND  organization_code = v_org_code;


    SELECT inventory_item_id
    INTO   l_item_id
    FROM   mtl_system_items
    WHERE  1=1
      AND  segment1 = v_item
      AND  organization_id = l_org_id_s;


    DBMS_OUTPUT.PUT_LINE('Group_ID|Oganization_id|Component_Item_id|Top_Item|Assembly_Item|Component_Item|Component_Qty|Extended_Qty');

    -- Group id
    SELECT  bom_explosion_temp_s.NEXTVAL
    INTO    l_grp_id
    FROM    dual    ;

    -- Session id
    SELECT  bom_explosion_temp_session_s.NEXTVAL
    INTO    l_session_id
    FROM    dual    ;

    -- Bom or Eng Item
    BEGIN
     SELECT  bbom.assembly_type
     INTO    l_bom_or_eng
     FROM    bom_bill_of_materials bbom
     WHERE   assembly_item_id= l_item_id
     AND     organization_id=l_org_id_s
         ;
    EXCEPTION
     WHEN NO_DATA_FOUND THEN
            l_bom_or_eng := 1;
       WHEN OTHERS THEN
          l_bom_or_eng := 1;
    END;

    -- Called BOM Explosion with Oracle API
    bompexpl.exploder_userexit(
      verify_flag             =>0,
      org_id                  =>l_org_id_s,
      order_by                =>1,
      grp_id                  =>l_grp_id,
      session_id              =>l_session_id,
      levels_to_explode       =>l_levels_to_explode,
      bom_or_eng              =>l_bom_or_eng,
      impl_flag               =>1,
      plan_factor_flag        =>2,
      explode_option          =>2,
      module                  =>l_module,
      cst_type_id             =>l_cst_type_id,
      std_comp_flag           =>2,
      expl_qty                =>1,
      item_id                 =>l_item_id,
      alt_desg                =>'',
      comp_code            =>'',
      rev_DATE                =>to_date(SYSDATE, 'YYYY/MM/DD HH24:MI'),
      err_msg                 =>l_err_msg,
      error_code              =>l_error_code
      );

    IF ( l_error_code <> 0 ) THEN
        ROLLBACK;
        DBMS_OUTPUT.PUT_LINE('ERROR: ' || l_err_msg);
    ELSE
        FOR comp IN exploded_items
        LOOP
            BEGIN
                SELECT segment1
                INTO v_top_item
                FROM mtl_system_items
                WHERE 1=1
                AND inventory_item_id = comp.top_item_id
                AND organization_id = l_org_id_s;
            EXCEPTION
                WHEN NO_DATA_FOUND THEN
                v_top_item := NULL;
            END;

            BEGIN
                SELECT segment1
                INTO v_assembly_item
                FROM mtl_system_items
                WHERE 1=1
                AND inventory_item_id = comp.assembly_item_id
                AND organization_id = comp.organization_id;
            EXCEPTION
                WHEN NO_DATA_FOUND THEN
                v_assembly_item := NULL;
            END;

            BEGIN
                SELECT segment1
                INTO v_component_item
                FROM mtl_system_items
                WHERE 1=1
                AND inventory_item_id = comp.component_item_id
                AND organization_id = comp.organization_id;--l_org_id_d;
            EXCEPTION
                WHEN NO_DATA_FOUND THEN
                v_component_item := NULL;
            END;

            DBMS_OUTPUT.PUT_LINE(comp.group_id || '|' || comp.organization_id || '|' || comp.component_item_id || '|' || v_top_item || '|' || v_assembly_item || '|'|| v_component_item || '|' || comp.component_quantity || '|' || comp.extended_quantity);
        END LOOP;
        DELETE FROM bom_explosion_temp WHERE group_id = l_grp_id; -- Delete records FROM bom_explosion_temp Table.
        COMMIT;
    END IF;
END;
/
SPOOL OFF
 

原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 四个月宝宝枕秃怎么办 四个月的孩子缺钙怎么办 小孩张牙齿会发烧怎么办 对节白蜡叶子干了怎么办 刷机字库坏了怎么办 魅蓝返回键失灵怎么办 牙蛀严重且牙根松动怎么办 蛀牙伤到神经了怎么办 给客户发错邮件怎么办外贸 cf没有枪声和脚步声怎么办 穿越火线fps太低怎么办 win10玩cf没有声音怎么办 儿子死了欠的钱怎么办 儿子欠银行的钱怎么办 惹了社会上的混混怎么办 我是五年级惹上混混怎么办 孩子挨欺负家长怎么办幼儿园 孩子被同学欺负不敢上学怎么办 孩子被欺负不敢还手怎么办 2个月的婴儿内热怎么办 孩子把别人打了怎么办 学生在学校被打怎么办 妈和老丈人搞外遇怎么办? 丈人住在双方出资房中怎么办 金木水火土缺水怎么办? 练太极注意不集中怎么办 白色裙子被染色了怎么办 两边的头发向外翘怎么办 感冒的前兆来了怎么办 压腿把筋拉伤了怎么办 压腿压不下去了怎么办 床的气压杆坏了怎么办 床打开压不下去怎么办 裤子大了怎么办小窍门 小孩不准守课堂纪律怎么办 学生在学校体育课受伤怎么办 手指被篮球砸肿了怎么办 眼睛被篮球砸了怎么办 宝宝被篮球砸了怎么办 手被篮球砸肿了怎么办 上体育课时脚不慎扭伤怎么办