wip.wip_job_schedule_interface

--interface update wip requirement
DECLARE
  l_schedule_iface_rec wip.wip_job_schedule_interface%ROWTYPE; --工单任务接口表
  l_dtl_iface_rec      wip.wip_job_dtls_interface%ROWTYPE;     --工单工序组件接口表
  l_user_id           NUMBER := 1341;
BEGIN
  --工单任务接口表
  SELECT wip.wip_job_schedule_interface_s.NEXTVAL
    INTO l_schedule_iface_rec.group_id
    FROM dual;
  --
  SELECT wip.wip_job_schedule_interface_s.NEXTVAL
    INTO l_schedule_iface_rec.header_id
    FROM dual;
    --
  l_schedule_iface_rec.last_update_date  := SYSDATE;
  l_schedule_iface_rec.last_updated_by   := l_user_id;
  l_schedule_iface_rec.creation_date     := SYSDATE;
  l_schedule_iface_rec.created_by        := l_user_id;
  l_schedule_iface_rec.last_update_login := -1;
  --
  /*------------------------------------------------
  If set to N, must provide requirements manually
  any values other than N or n are assumed to be Y
   -------------------------------------------------*/
  --l_schedule_iface_rec.allow_explosion    := 'Y'
  
  l_schedule_iface_rec.load_type            := 3;  --Update standard or non-standard Discrete Job
  /*------------------------------------------------
    WIP_LOAD_TYPE       MFG_LOOKUPS
        1                Create Standard Job
        2                Create Repetitive Schedule
        3                Update Discrete Job
        4                Create Non–standard Job
    -----------------------------------------------*/
  l_schedule_iface_rec.process_phase        := 2;  --Validation
  
  l_schedule_iface_rec.process_status       := 1;  --Pending
  --
  l_schedule_iface_rec.wip_entity_id        := 33049; --12407
  l_schedule_iface_rec.organization_id      := 104;
  
  --l_schedule_iface_rec.start_quantity       := 10;
  l_schedule_iface_rec.completion_subinventory := 'BJC01';
  l_schedule_iface_rec.completion_locator_id := 7;
  --
  INSERT INTO wip.wip_job_schedule_interface VALUES l_schedule_iface_rec;
  --工单工序组件接口表
  l_dtl_iface_rec.parent_header_id     := l_schedule_iface_rec.header_id;
  l_dtl_iface_rec.group_id             := l_schedule_iface_rec.group_id;
  --
  l_dtl_iface_rec.wip_entity_id        := l_schedule_iface_rec.wip_entity_id; --12407
  l_dtl_iface_rec.organization_id      := 104;
  l_dtl_iface_rec.operation_seq_num    := 10;
  l_dtl_iface_rec.inventory_item_id_old := 32621; --'C699010049' 组件ID
  --l_dtl_iface_rec.inventory_item_id_new := 32621;
  l_dtl_iface_rec.wip_supply_type       := 1;      --供应类型  2.装配拉式 1.推式
  /*-----------------------------------
     WIP_SUPPLY         MFG_LOOKUPS
          1 Push
          2 Assembly Pull
          3 Operation Pull
          4 Bulk
          5 Supplier
          6 Phantom
          7 Based on Bill
    -----------------------------------*/
  l_dtl_iface_rec.supply_subinventory  := 'DQC01'; --供应子库
  l_dtl_iface_rec.supply_locator_id    := 6;       --供应货位
  l_dtl_iface_rec.comments             := 'test for wip interface'; --备注
  --
  l_dtl_iface_rec.load_type            := 2;  --
  /*-------------------------------------
  1. for loading a resource
  2. for loading a component
  3. for loading an operation
  4. for loading multiple resource usage
  --------------------------------------*/
  l_dtl_iface_rec.substitution_type    := 1;  --3:chage 1:delete 2:add
  
  l_dtl_iface_rec.process_phase        := 2;  --Validation
  l_dtl_iface_rec.process_status       := 1;  --Pending
  --
  l_dtl_iface_rec.last_update_date  := SYSDATE;
  l_dtl_iface_rec.last_updated_by   := l_user_id;
  l_dtl_iface_rec.creation_date     := SYSDATE;
  l_dtl_iface_rec.created_by        := l_user_id;
  l_dtl_iface_rec.last_update_login := -1;
  --
  INSERT INTO wip.wip_job_dtls_interface VALUES l_dtl_iface_rec;
  dbms_output.put_line(l_schedule_iface_rec.group_id);
END;

<think>好的,我现在需要解决用户的问题,将三个SQL查询合并成一个,同时确保DATA_FIELD = 'Z_RFID_RATIO_STATE'时能查出DATA_FIELD_LIST_BO的数据。首先,我得仔细分析每个查询的作用和它们之间的关系。 第一个查询是从WIP.DATA_FIELD表中选取DATA_FIELD为'Z_RFID_RATIO_STATE'的记录。这里的关键是DATA_FIELD字段,可能用来获取某个特定的数据字段信息,比如主键或唯一标识符。 第二个查询是从WIP.DATA_FIELD_LIST表中选取DATA_FIELD_BO等于第一个查询结果中的某个值。看起来DATA_FIELD_BO应该是关联到第一个表的某个字段,可能是主键或者外键。例如,第一个表的主键可能是DATA_FIELD_BO,而第二个表通过这个字段进行关联。 第三个查询是从WIP.DATA_FIELD_LIST_T表中选取DATA_FIELD_LIST_BO等于第二个查询结果中的某个值。同样,这里可能第二个表的主键是DATA_FIELD_LIST_BO,第三个表通过这个字段关联。 用户的目标是将这三个查询合并成一个,使得当DATA_FIELD = 'Z_RFID_RATIO_STATE'时,能获取到相关的DATA_FIELD_LIST_BO数据。这意味着需要将三个表通过外键连接起来,可能使用JOIN操作。 接下来,我需要确定各个表之间的关联字段。第一个查询中的DATA_FIELD表,主键可能是DATA_FIELD_BO,而第二个表DATA_FIELD_LIST中的DATA_FIELD_BO字段应该是外键,指向第一个表的主键。同样,第三个表DATA_FIELD_LIST_T中的DATA_FIELD_LIST_BO应该是外键,指向第二个表的主键,即DATA_FIELD_LIST_BO。 但是用户提到只需要查出DATA_FIELD_LIST_BO的数据,而第三个查询可能用于获取更多相关信息,但用户可能只需要前两个表的关联结果。或者可能需要将所有三个表连接起来,但根据问题描述,可能主要关注前两个表的连接,因为第三个查询的条件是固定的,可能作为过滤条件。 不过需要仔细看第三个查询的条件:DATA_FIELD_LIST_BO的值是'DataValueListBO:DataFieldBO:7090,Z_RFID_RATIO_STATE,TRUE',这可能是一个组合键,包含来自第一个表的DATA_FIELD_BO和DATA_FIELD的值。这可能意味着在第二个表中,DATA_FIELD_BO字段的值是类似于'DataFieldBO:7090,Z_RFID_RATIO_STATE'这样的结构,其中7090可能是某个ID,而Z_RFID_RATIO_STATE是DATA_FIELD的值。因此,可能需要通过字符串连接的方式将第一个表中的字段组合成DATA_FIELD_BO的值,然后与第二个表关联。 例如,假设第一个表中的DATA_FIELD_BO由ID和DATA_FIELD组合而成,如'DataFieldBO:' + ID + ',' + DATA_FIELD。因此,当第一个表中的DATA_FIELD为'Z_RFID_RATIO_STATE'时,其DATA_FIELD_BO可能是'DataFieldBO:7090,Z_RFID_RATIO_STATE',然后第二个表的DATA_FIELD_BO字段等于这个值,因此可以通过这个条件进行JOIN。 同样,第三个表中的DATA_FIELD_LIST_BO可能由第二个表的DATA_FIELD_LIST_BO字段构成,例如'DataValueListBO:' + DATA_FIELD_BO + ',TRUE',但用户可能只需要关联前两个表即可获取所需的DATA_FIELD_LIST_BO数据。 因此,合并的思路是:首先从DATA_FIELD表中过滤出DATA_FIELD = 'Z_RFID_RATIO_STATE'的记录,然后通过其DATA_FIELD_BO字段与DATA_FIELD_LIST表的DATA_FIELD_BO字段进行JOIN,从而获取对应的DATA_FIELD_LIST_BO的值。 可能的SQL如下: SELECT T.DATA_FIELD_LIST_BO FROM WIP.DATA_FIELD D JOIN WIP.DATA_FIELD_LIST T ON D.DATA_FIELD_BO = T.DATA_FIELD_BO WHERE D.DATA_FIELD = 'Z_RFID_RATIO_STATE'; 这里假设DATA_FIELD表的主键是DATA_FIELD_BO,而DATA_FIELD_LIST表的DATA_FIELD_BO是外键。这样,当DATA_FIELD为指定值时,通过JOIN获取对应的DATA_FIELD_LIST_BO。 如果需要包含第三个表,可能需要继续JOIN,但根据用户的问题描述,可能只需要前两个表的关联即可得到所需的DATA_FIELD_LIST_BO数据。不过用户提供的第三个查询可能用于其他目的,但问题中要求的是将三个查询合并成一句,使得当DATA_FIELD条件满足时能查出DATA_FIELD_LIST_BO的数据。因此可能需要三表JOIN,但需要明确关联条件。 或者,可能用户希望将三个查询的结果合并到一个查询中,即同时获取三个表中的相关数据。此时可能需要使用多个JOIN: SELECT * FROM WIP.DATA_FIELD D JOIN WIP.DATA_FIELD_LIST T ON D.DATA_FIELD_BO = T.DATA_FIELD_BO JOIN WIP.DATA_FIELD_LIST_T TT ON T.DATA_FIELD_LIST_BO = TT.DATA_FIELD_LIST_BO WHERE D.DATA_FIELD = 'Z_RFID_RATIO_STATE'; 但用户可能只需要DATA_FIELD_LIST_BO的数据,所以是否需要所有字段还是特定字段需要明确。根据用户提供的第三个查询,可能还需要关联到第三个表,但问题描述的重点是组合三个SQL为一个,当DATA_FIELD条件满足时获取DATA_FIELD_LIST_BO的数据。 可能用户的实际需求是将三个查询的条件合并,即通过一个查询同时满足三个条件。但需要明确每个表之间的关系。例如,第一个表根据DATA_FIELD过滤,第二个表根据DATA_FIELD_BO(来自第一个表)过滤,第三个表根据DATA_FIELD_LIST_BO(来自第二个表)过滤。但用户可能希望将这些条件整合到一个查询中,通过JOIN来实现。 综上所述,正确的合并方法应该是通过JOIN连接三个表,使用各自的关联条件,并在WHERE子句中指定DATA_FIELD的条件。例如: SELECT T.DATA_FIELD_LIST_BO FROM WIP.DATA_FIELD D JOIN WIP.DATA_FIELD_LIST T ON D.DATA_FIELD_BO = T.DATA_FIELD_BO JOIN WIP.DATA_FIELD_LIST_T TT ON T.DATA_FIELD_LIST_BO = TT.DATA_FIELD_LIST_BO WHERE D.DATA_FIELD = 'Z_RFID_RATIO_STATE' AND TT.DATA_FIELD_LIST_BO = 'DataValueListBO:DataFieldBO:7090,Z_RFID_RATIO_STATE,TRUE'; 不过这里可能存在问题,因为第三个表的条件中的DATA_FIELD_LIST_BO值是否动态生成。例如,第三个查询中的条件值是否基于前两个表的结果。例如,第三个查询中的值'DataValueListBO:DataFieldBO:7090,Z_RFID_RATIO_STATE,TRUE'中的7090可能来自第一个表的某个字段,比如ID,而Z_RFID_RATIO_STATE是DATA_FIELD的值,TRUE可能是固定值。因此,可能需要动态构建这个值。 例如,假设第一个表有一个ID字段(比如值为7090),那么第二个表的DATA_FIELD_BO可能是'DataFieldBO:' || ID || ',' || DATA_FIELD,而第三个表的DATA_FIELD_LIST_BO可能是'DataValueListBO:' || DATA_FIELD_BO || ',TRUE'。因此,在合并查询时,需要通过字符串拼接来关联这些字段。 这种情况下,合并的SQL可能如下: SELECT T.DATA_FIELD_LIST_BO FROM WIP.DATA_FIELD D JOIN WIP.DATA_FIELD_LIST T ON T.DATA_FIELD_BO = 'DataFieldBO:' || D.ID || ',' || D.DATA_FIELD JOIN WIP.DATA_FIELD_LIST_T TT ON TT.DATA_FIELD_LIST_BO = 'DataValueListBO:' || T.DATA_FIELD_BO || ',TRUE' WHERE D.DATA_FIELD = 'Z_RFID_RATIO_STATE'; 这里假设第一个表有一个ID字段,并且DATA_FIELD_BO的值由'DataFieldBO:'加上ID和DATA_FIELD拼接而成。而第三个表的DATA_FIELD_LIST_BO由'DataValueListBO:'加上第二个表的DATA_FIELD_BO和',TRUE'拼接而成。 但问题在于,原查询中的第三个条件中的DATA_FIELD_LIST_BO的值是固定的,即'DataValueListBO:DataFieldBO:7090,Z_RFID_RATIO_STATE,TRUE',其中7090可能来自第一个表的某个字段。因此,如果第一个表中的DATA_FIELD为'Z_RFID_RATIO_STATE'时,对应的ID是7090,那么可以通过动态拼接来关联。 因此,最终的合并查询可能需要使用字符串连接来构建关联条件,例如: SELECT T.DATA_FIELD_LIST_BO FROM WIP.DATA_FIELD D JOIN WIP.DATA_FIELD_LIST T ON T.DATA_FIELD_BO = CONCAT('DataFieldBO:', D.ID, ',', D.DATA_FIELD) JOIN WIP.DATA_FIELD_LIST_T TT ON TT.DATA_FIELD_LIST_BO = CONCAT('DataValueListBO:', T.DATA_FIELD_BO, ',TRUE') WHERE D.DATA_FIELD = 'Z_RFID_RATIO_STATE'; 这里假设存在ID字段,并且使用CONCAT函数拼接字符串。不同的数据库可能有不同的字符串连接方式,比如使用||或者+,但这里使用CONCAT作为示例。 不过,用户提供的原始查询中,第三个查询的条件是固定的,所以可能需要检查是否需要将第三个查询的条件包含进来,或者是否需要将其作为关联条件。如果第三个查询的条件是固定的,可能意味着在合并后的查询中需要包含这个条件,但更可能的是,这个条件实际上是基于前两个表的结果动态生成的,因此需要通过JOIN条件来关联。 因此,最终的合并SQL可能如下: SELECT T.DATA_FIELD_LIST_BO FROM WIP.DATA_FIELD D INNER JOIN WIP.DATA_FIELD_LIST T ON T.DATA_FIELD_BO = D.DATA_FIELD_BO INNER JOIN WIP.DATA_FIELD_LIST_T TT ON TT.DATA_FIELD_LIST_BO = T.DATA_FIELD_LIST_BO WHERE D.DATA_FIELD = 'Z_RFID_RATIO_STATE'; 但这里假设DATA_FIELD_BO是直接关联的,而DATA_FIELD_LIST_BO也是直接关联的。然而,根据用户提供的第三个查询的条件,DATA_FIELD_LIST_BO的值是'DataValueListBO:DataFieldBO:7090,Z_RFID_RATIO_STATE,TRUE',这可能意味着该值由多个部分组成,包括第一个表的ID和DATA_FIELD字段,以及固定值'TRUE'。因此,可能需要通过字符串拼接来构建这个值。 例如,假设第一个表有一个字段比如ID=7090,DATA_FIELD='Z_RFID_RATIO_STATE',那么DATA_FIELD_BO可能是'DataFieldBO:7090,Z_RFID_RATIO_STATE',而第二个表的DATA_FIELD_BO等于这个值。第三个表的DATA_FIELD_LIST_BO则是'DataValueListBO:'加上这个值,再加上',TRUE',即'DataValueListBO:DataFieldBO:7090,Z_RFID_RATIO_STATE,TRUE'。 因此,合并后的查询可能需要这样写: SELECT T.DATA_FIELD_LIST_BO FROM WIP.DATA_FIELD D JOIN WIP.DATA_FIELD_LIST T ON T.DATA_FIELD_BO = 'DataFieldBO:' || D.ID || ',' || D.DATA_FIELD JOIN WIP.DATA_FIELD_LIST_T TT ON TT.DATA_FIELD_LIST_BO = 'DataValueListBO:' || T.DATA_FIELD_BO || ',TRUE' WHERE D.DATA_FIELD = 'Z_RFID_RATIO_STATE'; 这里假设存在ID字段,并且使用||进行字符串连接。如果数据库不支持||,可能需要使用CONCAT函数。 总结来说,正确的合并方式取决于表之间的关联方式,尤其是DATA_FIELD_BO和DATA_FIELD_LIST_BO的生成规则。如果这些字段的值是通过拼接其他字段的值生成的,那么需要在JOIN条件中使用字符串拼接来正确关联表。</think>我们可以使用多表连接将三个查询合并为一句SQL,具体实现如下: ```sql SELECT T.* FROM WIP.DATA_FIELD D JOIN WIP.DATA_FIELD_LIST T ON T.DATA_FIELD_BO = 'DataFieldBO:' || D.ID || ',' || D.DATA_FIELD -- 假设D表有ID字段 JOIN WIP.DATA_FIELD_LIST_T TT ON TT.DATA_FIELD_LIST_BO = 'DataValueListBO:' || T.DATA_FIELD_BO || ',TRUE' WHERE D.DATA_FIELD = 'Z_RFID_RATIO_STATE'; ``` **关键点解析**: 1. 表关系分析(使用Markdown表格展示): | 表名 | 关键字段 | 作用 | |-----------------------|--------------------------|-----------------------------| | DATA_FIELD | DATA_FIELD_BO, DATA_FIELD | 存储基础字段定义 | | DATA_FIELD_LIST | DATA_FIELD_BO | 关联字段的业务对象 | | DATA_FIELD_LIST_T | DATA_FIELD_LIST_BO | 存储字段列表的扩展信息 | 2. 字段拼接逻辑(使用数学表达式表示): 设: - $D.ID$ 为DATA_FIELD表的主键 - $D.DATA\_FIELD$ 为字段名称 则: $$ T.DATA\_FIELD\_BO = \text{'DataFieldBO:'} \parallel D.ID \parallel \text{','} \parallel D.DATA\_FIELD $$ $$ TT.DATA\_FIELD\_LIST\_BO = \text{'DataValueListBO:'} \parallel T.DATA\_FIELD\_BO \parallel \text{',TRUE'} $$ **注意事项**: 1. 需要确认DATA_FIELD表中是否存在用于拼接的ID字段 2. 不同数据库的字符串连接符可能不同(Oracle用`||`,MySQL用`CONCAT()`) 3. 如果表间有更直接的关联字段,建议优先使用真实的外键进行连接 **扩展思考**: 当需要处理这类业务对象字段时,可以考虑创建视图来封装拼接逻辑: ```sql CREATE VIEW FIELD_RELATION_VIEW AS SELECT D.DATA_FIELD, T.DATA_FIELD_LIST_BO, TT.* FROM WIP.DATA_FIELD D JOIN WIP.DATA_FIELD_LIST T ON T.DATA_FIELD_BO = 'DataFieldBO:' || D.ID || ',' || D.DATA_FIELD JOIN WIP.DATA_FIELD_LIST_T TT ON TT.DATA_FIELD_LIST_BO = 'DataValueListBO:' || T.DATA_FIELD_BO || ',TRUE'; ``` 这样后续查询只需: `SELECT * FROM FIELD_RELATION_VIEW WHERE DATA_FIELD = 'Z_RFID_RATIO_STATE'`
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值