Mysql 游标 获取order by limit 1 结果不是selec 出来的结果

Mysql 游标 获取order by limit 1 结果不是selec 出来的结果SELECT location_no, lot_batch_no, qty_onhand, qty_reserved, id, receipt_date, product_date, …

Mysql 游标 获取order by limit 1 结果不是selec 出来的结果

SELECT location_no,
                lot_batch_no,
                qty_onhand,
                qty_reserved,
                id,
                receipt_date,
                product_date,
                expiry_date,
                pos_x
          FROM (
                 SELECT  s.location_no                 location_no, 
                         s.lot_batch_no                lot_batch_no,
                         s.qty_onhand                  qty_onhand, 
                         s.qty_reserved                qty_reserved,
                         s.id                          id,
                         s.receipt_date                receipt_date,
                         s.product_date                product_date,
                         s.expiry_date                 expiry_date,
                         m.pos_x                       pos_x
                 FROM    bay_list b, inventory_location m, inventory_part_in_stock s
                 WHERE   b.logistics_company_id = m.logistics_company_id
                 AND     b.bay_no = m.bay_no
                 AND     b.warehouse = m.warehouse
                 AND     m.lock_inventory = 0    -- 未锁定
                 AND     (b.bay_type = 1 OR 1 IS NULL) 
                 AND     m.location_no != "JHKW" -- JHKW为虚拟库位,不可以拣
                 AND     m.logistics_company_id = s.logistics_company_id
                 AND     m.warehouse = s.warehouse
                 AND     m.location_no = s.location_no
                 AND     s.qty_reserved >= 0
                 AND     s.qty_onhand - s.qty_reserved > 0
                 AND     s.part_no = "2047222"
                 AND     s.logistics_company_id = 10003
                 AND     s.warehouse = "GLP"
                 AND     s.owner_id = "CRM-YC"
                 AND     b.pick_type != 3             -- 拣货类型 (1. 零散拣货   ; 2.批量拣货   ; 3. 预包拣货 )
                 AND     s.lot_batch_no LIKE CONCAT("%", "@NRM@NRM", "%")  -- @contrl_state@qulity_state                
                   ) k
                 ORDER BY product_date
                 LIMIT 1)

代码100分

Mysql 游标 获取order by limit 1 结果不是selec 出来的结果

Mysql 游标 获取order by limit 1 结果不是selec 出来的结果

做了order by 第一个出来的时 生产日期最旧的,

但是跑存储过程的时候select 出来的缺不是这样的存储过程里面

Mysql 游标 获取order by limit 1 结果不是selec 出来的结果

代码100分DELIMITER $$

USE `zita_zwy_wms`$$

DROP PROCEDURE IF EXISTS `InventoryPartInStockUtil_FindAndResvWithLot`$$

CREATE DEFINER=`root`@`localhost` PROCEDURE `InventoryPartInStockUtil_FindAndResvWithLot`(  
             OUT qty_to_resv_              INT,
             OUT location_no_              VARCHAR(30),
             OUT lot_batch_no_             VARCHAR(30),
             IN company_id_                INT, 
             IN warehouse_                 VARCHAR(20),
             IN owner_id_                  VARCHAR(20),
             IN part_no_                   VARCHAR(30),
             IN qty_remain_                INT,
             IN location_type_             INT,              -- 库位类型.1.拣货区,2.存储区, 3: 次品区; 4: 待上架; 5: 退货区; 6: 分拣区
             IN user_id_                   VARCHAR(40),
             IN activity_id_               INT,
             IN pick_type_                 INT,
             IN part_lot_batch_no_         VARCHAR(20))
BEGIN 
   DECLARE id_                   INT;
   DECLARE qty_onhand_           INT;
   DECLARE qty_reserved_         INT;
   DECLARE order_by_             VARCHAR(2000);
   DECLARE receipt_date_         DATETIME;
   DECLARE product_date_         DATETIME;
   DECLARE expiry_date_          DATETIME;
   DECLARE pos_x_                INT;
   
   IF ((nvl(activity_id_ , 0) = 0) OR (pick_type_ != 3)) THEN   -- 拣货类型(1汇总拣货,2一单一品,3活动单拣货,4边分边拣, 5逐单拣货)
      BEGIN 
         -- 非活动订单的商品预留
         DECLARE get_inv_stk CURSOR FOR 
         SELECT location_no,
                lot_batch_no,
                qty_onhand,
                qty_reserved,
                id,
                receipt_date,
                product_date,
                expiry_date,
                pos_x
          FROM (
                 SELECT  s.location_no                 location_no, 
                         s.lot_batch_no                lot_batch_no,
                         s.qty_onhand                  qty_onhand, 
                         s.qty_reserved                qty_reserved,
                         s.id                          id,
                         s.receipt_date                receipt_date,
                         s.product_date                product_date,
                         s.expiry_date                 expiry_date,
                         m.pos_x                       pos_x
                 FROM    bay_list b, inventory_location m, inventory_part_in_stock s
                 WHERE   b.logistics_company_id = m.logistics_company_id
                 AND     b.bay_no = m.bay_no
                 AND     b.warehouse = m.warehouse
                 AND     m.lock_inventory = 0    -- 未锁定
                 AND     m.location_no != "JHKW" -- JHKW为虚拟库位,不可以拣货
                 AND     (b.bay_type = location_type_ OR location_type_ IS NULL) 
                 AND     m.logistics_company_id = s.logistics_company_id
                 AND     m.warehouse = s.warehouse
                 AND     m.location_no = s.location_no
                 AND     s.qty_reserved >= 0
                 AND     s.qty_onhand - s.qty_reserved > 0
                 AND     s.part_no = part_no_
                 AND     s.logistics_company_id = company_id_
                 AND     s.warehouse = warehouse_
                 AND     s.owner_id = owner_id_
                 AND     b.pick_type != 3             -- 拣货类型 (1. 零散拣货   ; 2.批量拣货   ; 3. 预包拣货 )
                 AND     s.lot_batch_no LIKE CONCAT("%", part_lot_batch_no_, "%")  -- @contrl_state@qulity_state 
                 ) k
                 ORDER BY order_by_
                 LIMIT 1; 
         DECLARE CONTINUE HANDLER FOR NOT FOUND SET id_ = NULL;    
         
         SET   order_by_   := CompanyOwnerPriotiryUtil_GetConfig(company_id_, owner_id_);
         OPEN  get_inv_stk;
         FETCH get_inv_stk INTO location_no_, lot_batch_no_, qty_onhand_, qty_reserved_, id_, receipt_date_, product_date_, expiry_date_, pos_x_;
         CLOSE get_inv_stk;
         
         SELECT location_no_, lot_batch_no_, qty_onhand_, qty_reserved_, id_, receipt_date_, product_date_, expiry_date_, pos_x_;
      END;
   ELSE
      BEGIN 
        -- 活动订单的商品预留
        DECLARE get_inv_stk CURSOR FOR 
                SELECT  s.location_no                 location_no, 
                        s.lot_batch_no                lot_batch_no,
                        s.qty_onhand                  qty_onhand, 
                        s.qty_reserved                qty_reserved,
                        s.id                          id
                FROM    inventory_location m, inventory_part_in_stock s , activity_policy_loca a
                WHERE   a.logistics_company_id = s.logistics_company_id
                AND     a.warehouse = s.warehouse
                AND     a.owner_id = s.owner_id
                AND     m.logistics_company_id = s.logistics_company_id
                AND     m.warehouse = s.warehouse
                AND     m.lock_inventory = 0    -- 未锁定
                AND     m.location_no != "JHKW" -- JHKW为虚拟库位,不可以拣货
                AND     a.activity_id = activity_id_
                AND     s.qty_onhand - s.qty_reserved > 0
                AND     s.part_no = part_no_
                AND     s.logistics_company_id = company_id_
                AND     s.warehouse = warehouse_
                AND     s.owner_id = owner_id_
                AND     s.location_no = a.location_no
                AND     s.lot_batch_no LIKE CONCAT("%", part_lot_batch_no_, "%")  -- @contrl_state@qulity_state 
                ORDER BY s.lot_batch_no
                LIMIT 1; 
        DECLARE CONTINUE HANDLER FOR NOT FOUND SET id_ = NULL;  
        
        OPEN  get_inv_stk;
        FETCH get_inv_stk INTO location_no_, lot_batch_no_, qty_onhand_, qty_reserved_, id_;
        CLOSE get_inv_stk;
      END;
   END IF; 
   
   SET qty_to_resv_ := 0;
   IF id_ > 0 THEN
      -- 锁定记录
      CALL InventoryPartInStockUtil_LockById( id_,
                                              qty_onhand_,
                                              "InventoryPartInStockUtil_FindAndResvWithLot" );
      --   
      SET qty_to_resv_ := LEAST( qty_onhand_ - qty_reserved_ , qty_remain_ );
      
      UPDATE inventory_part_in_stock
             SET  qty_reserved = GREATEST(0, LEAST(qty_onhand_, qty_reserved_ + qty_to_resv_))
             WHERE id = id_;
   END IF;
END$$

DELIMITER ;

注意:

Mysql 游标 获取order by limit 1 结果不是selec 出来的结果

解决方案 1.

 把order by 放到最里面去,结果正确

Mysql 游标 获取order by limit 1 结果不是selec 出来的结果

Mysql 游标 获取order by limit 1 结果不是selec 出来的结果

改了后还是不行

Mysql 游标 获取order by limit 1 结果不是selec 出来的结果

把变量放到 declare 这个游标前就可以了

 

SET @order_by_ := "s.product_date";
 SELECT  s.location_no                 location_no, 
                         s.lot_batch_no                lot_batch_no,
                         s.qty_onhand                  qty_onhand, 
                         s.qty_reserved                qty_reserved,
                         s.id                          id,
                         s.receipt_date                receipt_date,
                         s.product_date                product_date,
                         s.expiry_date                 expiry_date,
                         m.pos_x                       pos_x
                 FROM    bay_list b, inventory_location m, inventory_part_in_stock s
                 WHERE   b.logistics_company_id = m.logistics_company_id
                 AND     b.bay_no = m.bay_no
                 AND     b.warehouse = m.warehouse
                 AND     m.lock_inventory = 0    -- 未锁定
                 AND     m.location_no != "JHKW" -- JHKW为虚拟库位,不可以拣货
                 AND     (b.bay_type = 1 OR 1 IS NULL) 
                 AND     m.logistics_company_id = s.logistics_company_id
                 AND     m.warehouse = s.warehouse
                 AND     m.location_no = s.location_no
                 AND     s.qty_reserved >= 0
                 AND     s.qty_onhand - s.qty_reserved > 0
                 AND     s.part_no = "2047222"
                 AND     s.logistics_company_id = 10003
                 AND     s.warehouse = "GLP"
                 AND     s.owner_id = "CRM-YC"
                 AND     b.pick_type != 3             -- 拣货类型 (1. 零散拣货   ; 2.批量拣货   ; 3. 预包拣货 )
                 AND     s.lot_batch_no LIKE CONCAT("%", "@NRM@NRM", "%")  -- @contrl_state@qulity_state 
                 ORDER BY @order_by_

Mysql 游标 获取order by limit 1 结果不是selec 出来的结果

变量不可以写到order by 里面

 

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
转载请注明出处: https://daima100.com/8956.html

(0)
上一篇 2023-02-18
下一篇 2023-02-18

相关推荐

  • 使用魔棒工具选择PS图层中心点

    使用魔棒工具选择PS图层中心点在设计和美术制作方面,很多时候需要在Photoshop中进行图形处理和编辑,其中涉及到图层的选择与修改。如何准确选中一个图层中心点,是每个设计师和美术师都需要掌握的技能。本文将介绍如何使用魔棒工具来选取图层中心点,并且演示相应的Python代码。

    2024-07-05
    49
  • python爬虫学习之旅(爬虫python教程)

    python爬虫学习之旅(爬虫python教程)以下是python全栈开发课程学习路线,可以按照这个课程大纲有规划的进行学习:

    2023-10-29
    135
  • 包含python读写excel练习的词条

    包含python读写excel练习的词条1.首先说明我是使用的python3.5,我的office版本是2010,首先打开dos命令窗,安装必须的两个库,命令是:

    2023-11-19
    142
  • Kafka 集群在马蜂窝大数据平台的优化与应用扩展「建议收藏」

    Kafka 集群在马蜂窝大数据平台的优化与应用扩展「建议收藏」规模增长之后,性能问题无颖是非常重要的,但重要的从来不只是性能。

    2022-12-30
    148
  • Python网页爬虫

    Python网页爬虫在网络浏览器访问网址的时候,就已经向远程服务器发了请求,然后服务器会依据请求的方式和传输的参数作出相应响应。但是,如果我们需要大量地获取某些网站的数据,并进行分析、加工或保存,手动操作可就麻烦了。此时,Python网页爬虫便可以派上用场。

    2024-05-25
    74
  • SQL 概要「终于解决」

    SQL 概要「终于解决」学习要点 SQL 是为操作数据库而开发的语言。 虽然 SQL 也有标准,但实际上根据 RDBMS 的不同 SQL 也不尽相同。 SQL 通过一条语句来描述想要进行的操作,发送给 RDBMS。 原则上

    2023-04-25
    145
  • 数据库规范化设计_数据库案例分析

    数据库规范化设计_数据库案例分析操作异常 修改异常、插入异常、删除异常 数据依赖 数据间的联系 函数依赖FD 属性捡的联系,最基本的数据依赖 若确定X,则可以唯一的确定Y,则称Y依赖于X记X->Y 若X->Y,且Y是X的

    2023-03-04
    163
  • python绘图进阶(Python编程绘图)

    python绘图进阶(Python编程绘图)泰勒图绘制的核心思想是设计一个只有第一象限的极坐标,并将方差,相关系数进行捆绑,通过转化为极坐标系坐标进行绘制。为了实现泰勒图的绘制,我设计了两个函数:

    2023-11-25
    134

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注