`

MySQL函数过程示例-根据视图和游标删除数据

阅读更多
注:游标和视图结合起来使用,因为游标不支持动态表传入。
参数
IN esCorCode varchar(20),IN startTime varchar(50),IN endTime varchar(50)

存储过程
BEGIN
-- CALL P_DELETE_SERVICE_DATA('10000','2015-12-23 15:00:00','2015-12-23 15:58:00');

DECLARE count_val INT;

DECLARE cur_in CURSOR FOR SELECT count FROM view_into_table;

DECLARE cur_out CURSOR FOR SELECT count FROM view_out_table;
-- ---------------------------------------------创建视图-------------------------------------开始---------------------------
drop view if exists view_into_table;
set @view_into_sql=concat("create view view_into_table as select COUNT(WMIO_ID) count from  WM_INTO_ORDER_",esCorCode,' WHERE WMIO_COMPLETION_TIME ',' between ','"',startTime,'"',' and ','"',endTime,'"');
PREPARE stmt FROM  @view_into_sql;
EXECUTE stmt;

drop view if exists view_out_table;
set @view_out_sql=concat("create view view_out_table as select COUNT(WMOO_ID) count from WM_OUT_ORDER_",esCorCode,' WHERE SURE_DATE ',' between ','"',startTime,'"',' and ','"',endTime,'"');
PREPARE stmt FROM  @view_out_sql;
EXECUTE stmt;
-- ---------------------------------------------创建视图-------------------------------------结束---------------------------
SET @index_=1;
-- ---------------------------------------------业务数据表-------------------------------------------------------
SET @array_tables=CONCAT('WM_INTO_ORDER');                       -- 入库表

SET @array_tables=CONCAT(@array_tables,',','WM_OUT_ORDER');      -- 出库表

SET @array_tables=CONCAT(@array_tables,',','WM_WAREHOUSE_MOVE'); -- 移库表

SET @array_tables=CONCAT(@array_tables,',','WM_BATCH_PICKING');  -- 波次表

SET @array_tables=CONCAT(@array_tables,',','EB_SYS_LOG');        -- 系统日志表

SET @array_tables=CONCAT(@array_tables,',','EB_OPERATE_LOG');    -- 操作日志表

SET @array_tables=CONCAT(@array_tables,',','EB_INTO_STOCK_LOG'); -- 入库日志表

SET @array_tables=CONCAT(@array_tables,',','EB_OUT_STOCK_LOG');  -- 出库日志表

-- ---------------------------------------------业务数据表对应字段------------------------------------------------

SET @array_fields=CONCAT('WMIO_COMPLETION_TIME');              --  入库表    完成时间标识

SET @array_fields=CONCAT(@array_fields,',','SURE_DATE');       --  出库表    出库确认时间标识

SET @array_fields=CONCAT(@array_fields,',','WWM_COMPLETION_TIME');     --  移库表    完成时间标识

SET @array_fields=CONCAT(@array_fields,',','RE_TIME');         --  波次表            波次释放时间标识

SET @array_fields=CONCAT(@array_fields,',','CREATE_TIME');     --  系统日志表        创建时间标识

SET @array_fields=CONCAT(@array_fields,',','CREATE_TIME');     --  操作日志表        创建时间标识

SET @array_fields=CONCAT(@array_fields,',','CREATE_TIME');     --  入库日志表        创建时间标识

SET @array_fields=CONCAT(@array_fields,',','CREATE_TIME');     --  出库日志表        创建时间标识
-- ---------------------------------------------计算循环次数------------------------------------------------------         
SET @table_count=CHAR_LENGTH(@array_tables)-CHAR_LENGTH(REPLACE(@array_tables,',',''))+1; 

-- ---------------------------------------------执行业务数据操作--------------------------------------------------

WHILE @index_ <= @table_count DO

  SET @table_prex=SUBSTRING_INDEX(SUBSTRING_INDEX(@array_tables,',',@index_),',',-1);

  SET @table_name=CONCAT(@table_prex,'_',esCorCode);

  SET @fieldName=SUBSTRING_INDEX(SUBSTRING_INDEX(@array_fields,',',@index_),',',-1);

  SET @delete_data=CONCAT('delete from ',@table_name ,' where ',@fieldName,' between ','"',startTime,'"',' and ','"',endTime,'"');

  -- 入库单删除时删除对应的:入库明细、收货信息、退回信息
  IF @table_prex = 'WM_INTO_ORDER' THEN

       OPEN cur_in;

       FETCH cur_in INTO count_val;

       IF count_val>0 THEN
           -- 查询符合条件的入库单ID
           SET @into_order_ids=CONCAT('SELECT WMIO_ID FROM ',@table_name,' where ',@fieldName,' between ','"',startTime,'"',' and ','"',endTime,'"');

           SET @into_orderinfo_ids=CONCAT('SELECT WMOF_ID FROM WM_INTO_ORDERINFO_',esCorCode,' where  WMOF_IO_ID in ','(',@into_order_ids,')');

           -- 删除 入库ID对应的入库明细
           SET @WM_INTO_ORDERINFO=CONCAT('WM_INTO_ORDERINFO_',esCorCode);

           SET @delete_into_orderinfo=CONCAT('delete from ',@WM_INTO_ORDERINFO,' where  WMOF_IO_ID in ','(',@into_order_ids,')');

           -- 删除 入库ID对应的收货信息
           SET @WM_RECEIPT_INFO=CONCAT('WM_RECEIPT_INFO_',esCorCode);

           SET @delete_receipt_info=CONCAT('delete from ',@WM_RECEIPT_INFO,' where  WMRPS_OF_ID in ','(',@into_orderinfo_ids,')');

           -- 删除 入库ID对应的退货信息
           SET @WM_RETURN_INFO=CONCAT('WM_RETURN_INFO_',esCorCode);

           SET @delete_return_info=CONCAT('delete from ',@WM_RETURN_INFO,' where WMSP_OF_ID in ','(',@into_orderinfo_ids,')');

           -- 删除过程中要注意删除顺序
           prepare delete_talbe_data from @delete_receipt_info; 
           execute delete_talbe_data; 

           prepare delete_talbe_data from @delete_return_info; 
           execute delete_talbe_data; 

           prepare delete_talbe_data from @delete_into_orderinfo; 
           execute delete_talbe_data; 

           prepare delete_talbe_data from @delete_data; 
           execute delete_talbe_data; 

       END IF;

       CLOSE cur_in;

 --  删除出库对应的出库详情及出库计划
 ELSEIF @table_prex = 'WM_OUT_ORDER' THEN

       OPEN cur_out;

       FETCH cur_out INTO count_val;

       IF count_val>0 THEN
           -- 查询符合条件的出库单ID
           SET @out_order_ids=CONCAT('SELECT WMOO_ID FROM ',@table_name,' where ',@fieldName,' between ','"',startTime,'"',' and ','"',endTime,'"');

           -- 删除 出库ID对应的出库明细
           SET @WM_OUT_ORDER_DETAIL=CONCAT('WM_OUT_ORDER_DETAIL_',esCorCode);

           SET @delete_out_order_detail=CONCAT('delete from ',@WM_OUT_ORDER_DETAIL,' where  WMOD_OUT_ORDER_ID in ','(',@out_order_ids,')');

           -- 删除过程中要注意删除顺序

           prepare delete_talbe_data from @delete_out_order_detail; 
           execute delete_talbe_data; 

           prepare delete_talbe_data from @delete_data; 
           execute delete_talbe_data; 

       END IF;

       CLOSE cur_out;
 ELSE

   prepare delete_talbe_data from @delete_data; 

   execute delete_talbe_data; 

 END IF;
 
  SET @index_=@index_+1; 

END WHILE; 

END
分享到:
评论

相关推荐

    mysql高级部分--包含索引建立优化_函数_存储过程_触发器_及游标

    综上所述,MySQL中的索引、视图、触发器、游标、事务和存储过程都是高级特性,这些工具可以帮助开发人员更好地管理和操作数据库。通过对这些概念的理解和实践,可以大幅提升数据库应用的性能和可靠性。

    mySQL培训手册

    - **1.2.3.4.14 MySQL函数—字符串处理函数** - 如`UPPER()`, `LOWER()`, `CONCAT()`, `SUBSTRING()`等。 - **1.2.3.4.15 MySQL函数—日期处理函数** - 如`NOW()`, `DATE_ADD()`, `TIMESTAMPDIFF()`等。 - **...

    mysql-oracle-postgree的比较文档-英文版[原创文档]

    9. **函数和存储过程的移植示例**:文档可能详细介绍了将PL/SQL函数和存储过程移植到PL/pgSQL的过程,包括简单的函数、创建新函数的函数、涉及字符串操作和OUT参数的存储过程,以及更复杂的存储过程。 10. **总结**...

    MySQL数据库考试试题及答案

    根据提供的文件内容,我们可以归纳总结出一系列关于MySQL数据库的重要知识点,包括了选择题涉及的SQL命令、函数使用、数据操作等方面。下面是详细的知识点解析: ### 1. 聚合函数 - 求数据总和 - **知识点**:在SQL...

    MYSQL存储过程详解

    存储过程相关的元数据可以通过系统视图或信息架构视图进行查询,这些元数据包括存储过程的名称、参数列表、创建时间等信息。 #### 细节(Details) 存储过程的具体实现涉及到许多细节,包括如何定义变量、如何控制...

    MySQL 5.0 存储过程

    在MySQL 5.0中,存储过程被归类为两种类型:**存储过程**和**函数**。存储过程主要用于执行一系列复杂的SQL命令,而函数则用于执行特定计算并返回结果。 **示例**: ```sql DELIMITER // CREATE PROCEDURE p() ...

    MySQL数据库笔试试题及答案(全)

    根据给定文件的信息,我们可以总结出一系列关于MySQL数据库的基础知识点,涵盖了SQL语言的基本操作、数据检索、表结构管理以及高级特性等内容。以下是针对文件中提到的一些关键知识点的详细解释: ### 1. 聚合函数 ...

    Python3连接mysql

    1. **DDL(Data Definition Language,数据定义语言)**:主要用于定义数据库结构,如创建、修改或删除表、索引、视图等。常见的DDL命令包括: - `CREATE`:创建数据库、表、索引等。 - `ALTER`:修改已有的表结构...

    MySQL 4.1.0 api

    MySQL 4.1.0.chm文件是一个帮助文档,包含了MySQL 4.1.0 API的详细信息,包括函数参考、示例代码和使用指南。开发者可以通过查阅这个文档来学习如何使用新的API特性,解决开发过程中遇到的问题。这个文档对于理解和...

    mysql-lesson-04-homework:MySQL第4课作业

    在MySQL中,我们可以使用TSQL创建、修改和删除数据库对象,如表、视图、存储过程等;插入、更新、删除数据;以及管理用户权限和处理事务。 1. 数据定义语言(DDL): - `CREATE DATABASE`:创建新的数据库。 - `...

    经典SQL语句大全

    SQL(Structured Query Language)是一种用于管理和处理关系数据库的标准语言,其功能强大且广泛应用于各种数据库系统,如MySQL、Oracle、SQL Server等。本篇文章将详细解释标题和描述中提到的经典SQL语句及其用途。...

    mysql学习笔记和代码.zip

    本压缩包“mysql学习笔记和代码.zip”显然包含了有关MySQL的学习资料和实际编程示例,旨在帮助用户深入理解和掌握这个强大的数据库系统。下面我们将详细探讨MySQL的关键概念、功能以及如何通过代码进行实践。 首先...

    mysql&python入门基础教程.zip

    3. **数据操作**:通过Python编写示例代码,展示如何插入、更新、删除数据库中的记录,以及如何查询和处理查询结果。 4. **游标对象和批处理**:讲解游标对象在执行SQL语句中的作用,以及如何使用批处理提高数据...

    Chapter 13 SQL Statement Syntax.pdf

    根据上述内容,我们可以看到MySQL提供的SQL语句涵盖了数据定义、数据操作、事务管理、复制配置、存储过程和函数以及数据库管理等多个方面,而且它们是数据库操作中不可或缺的工具。每个语法部分都有其特定的结构和...

    MySQL与Oracle的语法区别详细对比

    - MySQL则有`DATE_FORMAT`和`TIME_FORMAT`函数,分别用于格式化日期和时间,同样采用特定的格式模型,例如`'%Y-%m-%d'`和`'%H-%i-%S'`。 - 对于日期增加操作,Oracle使用`ADD_MONTHS`函数,而MySQL使用`DATE_ADD`...

    最好的PHP+MYSQL中文教程

    此外,还将深入到更复杂的SQL操作,如JOIN用于联接多个表,子查询用于嵌套查询,以及视图和存储过程的使用。 两者结合的部分,教程会展示如何在PHP中连接MySQL数据库,执行SQL查询,处理查询结果,并将数据动态显示...

    超详细Oracle教程 115页讲解以及例子

    - **变量和数据类型**:PL/SQL中的变量声明和使用。 - **流程控制**:IF、CASE、LOOP等语句。 #### 十九、游标、函数 - **游标**:处理记录集的一种方式。 - **内置函数**:数学函数、字符串函数等。 - **用户...

    oracle最全学习笔记(个人总结)

    - **事务的隔离级别**:用于控制事务间的并发执行和数据一致性,主要有读未提交、读已提交、可重复读和串行化四个级别。 #### 五、存储引擎 - **说明**:在Oracle中,存储引擎的概念不像MySQL那样明确,但可以通过...

    一点sql语句总结

    SQL(Structured Query Language)是一种用于管理关系数据库的标准语言,它被广泛应用于各种数据库管理系统中,如MySQL、Oracle、SQL Server等。这篇博客“一点sql语句总结”可能涵盖了SQL的基本概念、常用操作以及...

Global site tag (gtag.js) - Google Analytics