2019独角兽企业重金招聘Python工程师标准>>>

CREATE DEFINER=`root`@`localhost` PROCEDURE `MoveOrderUtil_PartMove`(in  company_id_ int ,in  owner_id_                varchar(10),in  warehouse_               varchar(10),in  part_no_                 varchar(20),in  lot_batch_no_             varchar(20),in  fr_location_no_          varchar(20),in  to_warehouse_            varchar(10),in  to_location_no_          varchar(20),in  qty_to_move_             int,in  user_id_                 varchar(40))
BEGINDECLARE totalSum_           int ;DECLARE qty_onhand_         int ;DECLARE inv_stk_id_         int ;DECLARE move_no_            varchar(20);DECLARE move_id_            int ;if nvl(lot_batch_no_ , '*') = '*' thenbeginDECLARE get_in_stock CURSOR FORSELECT sum(qty_onhand) FROM   inventory_part_in_stockWHERE  logistics_company_id = company_id_and    warehouse = warehouse_and    location_no = fr_location_no_and    part_no = part_no_ ;DECLARE CONTINUE HANDLER FOR NOT FOUND SET totalSum_ = NULL; OPEN  get_in_stock;FETCH get_in_stock INTO totalSum_;CLOSE get_in_stock;  end;else beginDECLARE get_in_stock CURSOR FORSELECT sum(qty_onhand) FROM   inventory_part_in_stockWHERE  logistics_company_id = company_id_and    warehouse = warehouse_and    location_no = fr_location_no_and    part_no = part_no_ and    lot_batch_no = lot_batch_no_ ;DECLARE CONTINUE HANDLER FOR NOT FOUND SET totalSum_ = NULL; OPEN  get_in_stock;FETCH get_in_stock INTO totalSum_;CLOSE get_in_stock; end;end if;if(nvl(totalSum_ , 0) < qty_to_move_ ) thenCALL ErrorSys_RecordGeneral('MoveOrder', '库位 :P1 库存  : P2 少于需移库数量 : P3 !',fr_location_no_,totalSum_,qty_to_move_);end if;beginDECLARE get_in_stock CURSOR for( SELECT id , qty_onhand from temp_view); DECLARE CONTINUE HANDLER FOR NOT FOUND SET inv_stk_id_ = null;  DROP VIEW IF EXISTS temp_view;  SET @sqlstr = "CREATE VIEW temp_view as ";  if nvl(lot_batch_no_ , '*') = '*' thenSET @sqlstr = CONCAT(@sqlstr , "SELECT id , qty_onhandFROM   inventory_part_in_stockWHERE  logistics_company_id = ", company_id_ ,"and    warehouse = '", warehouse_ ,"'and    location_no = '", fr_location_no_ ,"'and    part_no = '", part_no_ ,"' ");elseSET @sqlstr = CONCAT(@sqlstr , "SELECT id , qty_onhandFROM   inventory_part_in_stockWHERE  logistics_company_id = ", company_id_ ,"and    warehouse = '", warehouse_ ,"'and    location_no = '", fr_location_no_ ,"'and    part_no = '", part_no_ ,"' and    lot_batch_no = '", lot_batch_no_ ,"' "); end if ;PREPARE stmt FROM @sqlstr;  EXECUTE stmt;  DEALLOCATE PREPARE stmt;  OPEN get_in_stock;  moveLoop : loopFETCH get_in_stock INTO inv_stk_id_ , qty_onhand_ ; if inv_stk_id_ is NULL thenleave moveLoop;end if ;if qty_onhand_ >=  qty_to_move_ then --  新增入库单call MoveOrderUtil_NewOrder(move_no_ ,company_id_ , warehouse_ , inv_stk_id_ , qty_to_move_ , to_warehouse_ ,to_location_no_ , owner_id_ , 1 ,  user_id_); leave moveLoop;else --  新增入库单call MoveOrderUtil_NewOrder(move_no_ ,company_id_ , warehouse_ , inv_stk_id_ , qty_to_move_ , to_warehouse_ ,to_location_no_ , owner_id_ , 1 ,  user_id_); set qty_to_move_ = qty_to_move_ - qty_onhand_ ;end if;end loop moveLoop ;close get_in_stock ;set move_id_ = MoveOrderUtil_GetIdByUnindex(company_id_ ,move_no_ );-- 执行移库确认call MoveOrderUtil_ConfirmOrder(move_id_ , user_id_);-- 执行移库完成call MoveOrderUtil_ExecMove(move_id_ , user_id_);end ;END

转载于:https://my.oschina.net/u/3556610/blog/3018801

mysql 动态游标 , 实际上不要使用, 因为两个人同时执行会删除了其中一个人的数据...相关推荐

  1. mysql 动态游标_mysql动态游标与mysql存储过程游标(示例)

    -- 建立测试表和数据 create table webuser (username varchar(10)); insert into webuser values ('a1'),('a2'),(' ...

  2. mysql 存储过程 预处理语句_用于预处理语句的MySQL存储过程游标

    我有一些坏消息和好消息 . 首先是坏消息 . MySQL手册说游标不能用于使用PREPARE和EXECUTE准备和执行的动态语句 . 在游标创建时检查游标的语句,因此该语句不能是动态的 . 所以到目前 ...

  3. new com.mysql.jdbc.Driver()为什么Driver会创建两次

    在学习JDBC的时候,通常有两种方式去注册数据库驱动程序(这里采用MySQL数据库),分别为: Java代码 1. DriverManager.registerDriver(new Driver()) ...

  4. 关于MySQL数据库游标的笔试题_关于BAT20180825版本面试中常见数据库面试25道试题及对应答案整理汇总...

    1.触发器的作用?触发器是一中特殊的存储过程,主要是通过事件来触发而被执行的.它可以强化约束,来维护数据的完整性和一致性,可以跟踪数据库内的操作从而不允许未经许可的更新和变化.@b@@b@可以联级运算 ...

  5. 【Oracle】PL/SQL 显式游标、隐式游标、动态游标

    在PL/SQL块中执行SELECT.INSERT.DELETE和UPDATE语句时,Oracle会在内存中为其分配上下文区(Context Area),即缓冲区.游标是指向该区的一个指针,或是命名一个 ...

  6. Mysql动态数据多条件查询

    Mysql动态数据多条件查询 前言 有的时候,我们进行数据的数据查询的时候,我们会加入筛选条件. 例如: select * from user where username = ? // ? 指的是自 ...

  7. 什么是mysql的游标_数据库中的游标到底是什么意思

    数据库中的游标到底是什么意思 关注:177  答案:2  mip版 解决时间 2021-01-15 20:54 提问者更无风月 2021-01-15 15:53 数据库中的游标到底是什么意思 最佳答案 ...

  8. oracle 动态游标行数,oracle动态游标的简单实现方法

    下面就是例子程序 --明细表打印予处理  通用报表: procedure mx_print_common(pd_id in mx_pd_syn.pd_id%type, p_pd_mxb_id IN m ...

  9. MySQL存储过程+游标+触发器

    [0]README 0.1)本文旨在 arrange mysql 存储过程及如何在存储中使用游标  的相关知识: 0.2)delimieter的用法:参见 http://blog.csdn.net/p ...

  10. mysql 解释 游标赋值_Mysql_游标

    MySQL中的游标是一个十分重要的概念.游标提供了一种对从表中检索出的数据进行操作的灵活手段,就本质而言,游标实际上是一种能从包括多条数据记录的结果集中每次提取一条记录的机制.MySQL中的游标的语法 ...

最新文章

  1. asp.net中长内容自动分页的实现
  2. python 因果推断_KDD 2018:微软推出用于因果推断的Python库
  3. PowershellTFS_Part 1
  4. Crypto++库在VS 2005中的使用——RSA加解密
  5. .NET3.0已经Pre-release了
  6. 树莓派vnc用法 linux,怎样使用VNC在树莓派上运行远程桌面
  7. 密钥生成并配置_如何在 CentOS 8 上设置 SSH 密钥
  8. 数据分析学习笔记—matplotlib折线图、条形图、直方图、饼状图基础绘制
  9. 连续区间(数据岛)查询
  10. 用c语言库函数进行排序
  11. 自建自用的微信推送服务
  12. python 折线图 excel_如何使用python读取excel数据并绘制折线图
  13. 修心修行“十一字”真言
  14. h5难做吗_这样的h5制作难吗,通过什么平台可以做出来?
  15. php如何对mysql加锁_MySQL 加锁处理分析(一)
  16. CMDN Club每周精选(第1期)
  17. 两个Ctrl键同时失灵了怎么办
  18. 我炒股十五年,亏损超过五十万,我该怎么办?
  19. 仿佛来自虚空,Grothendieck的故事2
  20. 《张维迎:反思经济学》读后感作文4300字

热门文章

  1. 用C#实现软件自动更新思路
  2. OpenCV能调用的摄像头类型
  3. Machine Learning——Homework 6
  4. MATLAB 学习资料整理
  5. 搭建rtmp推流服务器
  6. python打开其他文件_python打开通达信,如何在python中打开其他文件
  7. Struts2-01-配置文件
  8. Android的TextView设置padding无效
  9. java 权限控制 demo_javaWeb用户权限控制简单实现过程
  10. Improvements of Job Scheduler and Query Execution on Flink OLAP