`

mysql 存储过程

阅读更多
DELIMITER $$

USE `taxms`$$

DROP PROCEDURE IF EXISTS `proc_queryPrePayTaxReport`$$

CREATE DEFINER=`taxms`@`10.%` PROCEDURE `proc_queryPrePayTaxReport`(
	IN p_zywlx VARCHAR(120),    	-- 行业类型
	IN p_zheadnum VARCHAR(120),	-- 经营本部
	IN p_zdisnum VARCHAR(30),   	-- 地区
	IN p_zbukrs VARCHAR(30),   	-- 法人
	IN p_bukrs VARCHAR(10),    	-- 公司代码
	IN p_tax_pay_sub VARCHAR(20),   -- 纳税主体
	IN p_warn_value VARCHAR(2),     -- 预警值
	IN p_emp_code VARCHAR(10),      -- 登录工号
	IN p_fisrDayOfJanuary VARCHAR(12), -- 当前年一月第一天
	IN p_periodStart VARCHAR(12),	-- 当前月第一天
	IN p_query_type VARCHAR(2),	-- 查询类型(0:查询数量;1:查询记录)
	IN p_pagestart INT(7),		-- 起始记录
	IN p_pageend INT(5)		-- 结束记录
)
BEGIN 
DECLARE not_found INT DEFAULT 0 ;-- 是否未找到数据 标记 
DECLARE v_tax_pay_sub VARCHAR(20) DEFAULT '';
DECLARE v_tax_pay_name VARCHAR(200) DEFAULT '';
DECLARE v_bukrs VARCHAR(30) DEFAULT '';
DECLARE v_znslx  VARCHAR(30) DEFAULT '';	        	
DECLARE v_zywlx VARCHAR(30) DEFAULT '';
DECLARE v_zbukrs VARCHAR(30) DEFAULT '';
DECLARE v_zbranch VARCHAR(30) DEFAULT '';
DECLARE v_zdisnum VARCHAR(30) DEFAULT '';
DECLARE v_datab DATE DEFAULT NULL;
DECLARE v_zheadnum VARCHAR(30) DEFAULT '';
DECLARE v_ywlxmc VARCHAR(100) DEFAULT '';
DECLARE v_zheadname VARCHAR(120) DEFAULT '';
DECLARE v_zdisname VARCHAR(120) DEFAULT '';
DECLARE v_butxt VARCHAR(100) DEFAULT '';
DECLARE v_zbutxt VARCHAR(100) DEFAULT '';
DECLARE v_tax_amount VARCHAR(512) DEFAULT '';
DECLARE v_apply_taxobject VARCHAR(100) DEFAULT '';
DECLARE v_period_start VARCHAR(12) DEFAULT '';
DECLARE v_period_end VARCHAR(12) DEFAULT '';
DECLARE v_apply_id VARCHAR(32) DEFAULT '';
DECLARE v_tax_type VARCHAR(32) DEFAULT '';
DECLARE v_apply_status VARCHAR(16) DEFAULT '';
DECLARE v_apply_userid VARCHAR(10) DEFAULT '';
DECLARE v_tps_count INT(10) DEFAULT 0;
DECLARE v_M1 VARCHAR(20) DEFAULT '';
DECLARE v_M2 VARCHAR(20) DEFAULT '';
DECLARE v_M3 VARCHAR(20) DEFAULT '';
DECLARE v_M4 VARCHAR(20) DEFAULT '';
DECLARE v_M5 VARCHAR(20) DEFAULT '';
DECLARE v_M6 VARCHAR(20) DEFAULT '';
DECLARE v_M7 VARCHAR(20) DEFAULT '';
DECLARE v_M8 VARCHAR(20) DEFAULT '';
DECLARE v_M9 VARCHAR(20) DEFAULT '';
DECLARE v_M10 VARCHAR(20) DEFAULT '';
DECLARE v_M11 VARCHAR(20) DEFAULT '';
DECLARE v_M12 VARCHAR(20) DEFAULT '';
DECLARE v_M13 VARCHAR(20) DEFAULT '';
DECLARE v_fillValue DECIMAL(16,2) DEFAULT 0;
DECLARE v_valueType VARCHAR(240) DEFAULT '';
DECLARE v_MONAT VARCHAR(20) DEFAULT '';
DECLARE v_GJAHR VARCHAR(20) DEFAULT '';
DECLARE cursor_prePayTax CURSOR FOR
SELECT
	DISTINCT
	p.TAX_PAY_SUB,
	p.FILL_VALUE,
	p.VALUE_TYPE,
	r.TAX_PAY_NAME,
	r.BUKRS,
	r.ZBUKRS,
	r.ZYWLX,
	r.ZHEADNUM,
	r.ZHEADNAME,
	r.ZDISNUM,
	r.ZDISNAME,
	r.YWLXMC,
	r.BUTXT,
	p.GJAHR,
	p.MONAT
FROM
  report_original_pick p 
  JOIN report_custom_info r 
    ON p.TAX_PAY_SUB = r.TAX_PAY_SUB 
     AND p.GJAHR < '2016' -- 2016以前的历史数据
WHERE 1 = 1
-- AND r.END_TIME >= p_periodStart 
AND p.GJAHR = YEAR(p_periodStart)
AND p.MONAT <= LPAD(MONTH(p_periodStart),2,'0')
AND p.VALUE_TYPE = 'YJSK'
AND IF(p_zywlx = '' OR p_zywlx IS  NULL,1=1,r.ZYWLX = p_zywlx)
AND IF(p_zheadnum = '' OR p_zheadnum IS  NULL,1=1,r.ZHEADNUM = p_zheadnum)
AND IF(p_zdisnum = '' OR p_zdisnum IS  NULL,1=1,r.ZDISNUM = p_zdisnum)
AND IF(p_zbukrs = '' OR p_zbukrs IS  NULL,1=1,r.ZBUKRS = p_zbukrs)
AND IF(p_bukrs = '' OR p_bukrs IS  NULL,1=1,r.BUKRS = p_bukrs)    
AND IF(p_tax_pay_sub = '' OR p_tax_pay_sub IS  NULL,1=1,p.TAX_PAY_SUB = p_tax_pay_sub)
AND r.BUKRS IN (SELECT b.BUKRS AS DEPT_CODE FROM e_user_role t 
			JOIN crop_infos b 
			  ON t.DEPT_CODE = b.BUKRS 
			JOIN um_user u 
			  ON t.USER_ID = u.ID WHERE u.EMP_CODE = p_emp_code)
UNION -- 2016年以后的数据
SELECT
	DISTINCT
	p.TAX_PAY_SUB,
	p.FILL_VALUE,
	p.VALUE_TYPE,
	t2.TAX_PAY_NAME,
	t2.BUKRS,
	t3.ZBUKRS,
	t3.ZYWLX,
	t4.ZHEADNUM,
	t4.ZHEADNAME,
	t4.ZDISNUM,
	t4.ZDISNAME,
	l.YWLXMC,
	t5.BUTXT,
	p.GJAHR,
	p.MONAT
FROM
  report_original_pick p
JOIN 
  b_ztfi_tax_company t2 
  ON p.TAX_PAY_SUB = t2.TAX_PAY_SUB
  AND t2.END_TIME >= p_periodStart AND 
  p.GJAHR > '2015'
  JOIN crop_infos t5 
    ON t5.BUKRS = t2.BUKRS 
  JOIN b_ztfi_t001_ext t3 
    ON t2.BUKRS = t3.BUKRS 
  JOIN b_ztfi_ext_are_map t4 
    ON t4.ZDISNUM = t3.ZDISNUM 
  JOIN a_ztfi_ywlx l 
    ON t3.ZYWLX = l.ZYWLX	
WHERE 1 = 1 
		AND p.GJAHR = YEAR(p_periodStart)
		AND p.MONAT = LPAD(MONTH(p_periodStart),2,'0')
		AND p.VALUE_TYPE = 'YJSK'
		AND IF(p_zywlx = '' OR p_zywlx IS  NULL,1=1,t3.ZYWLX = p_zywlx)
		AND IF(p_zheadnum = '' OR p_zheadnum IS  NULL,1=1,t4.ZHEADNUM = p_zheadnum)
		AND IF(p_zdisnum = '' OR p_zdisnum IS  NULL,1=1,t4.ZDISNUM = p_zdisnum)
		AND IF(p_zbukrs = '' OR p_zbukrs IS  NULL,1=1,t3.ZBUKRS = p_zbukrs)
		AND IF(p_bukrs = '' OR p_bukrs IS  NULL,1=1,t2.BUKRS = p_bukrs)    
		AND IF(p_tax_pay_sub = '' OR p_tax_pay_sub IS  NULL,1=1,p.TAX_PAY_SUB = p_tax_pay_sub)
		AND t2.BUKRS IN (SELECT b.BUKRS AS DEPT_CODE FROM e_user_role t 
					JOIN crop_infos b 
					  ON t.DEPT_CODE = b.BUKRS 
					JOIN um_user u 
					  ON t.USER_ID = u.ID WHERE u.EMP_CODE = p_emp_code);     		  
-- end 2016			  
DECLARE CONTINUE HANDLER FOR NOT FOUND
BEGIN SET not_found = 1; -- 如果未找到数据 将标记改为不可用
END;
DROP TEMPORARY TABLE IF EXISTS tmp_prePayTax;		
CREATE TEMPORARY TABLE	tmp_prePayTax(
  ZYWLX VARCHAR(128), -- 行业类型代码
  YWLXMC VARCHAR(256), -- 行业类型名称
  ZHEADNUM VARCHAR(30), -- 本部代码
  ZHEADNAME VARCHAR(120), -- 本部名称
  ZDISNUM VARCHAR(30),  -- 区部代码
  ZDISNAME VARCHAR(120), -- 区部名称
  ZBUKRS VARCHAR(30), -- 法人
  ZBUTXT VARCHAR(30), -- 公司名称
  BUKRS VARCHAR(30),  -- 公司代码
  BUTXT VARCHAR(200), -- 公司名称
  TAX_PAY_SUB VARCHAR(20), -- 纳税主体代码
  TAX_PAY_NAME VARCHAR(200), -- 纳税主体名称
  TAX_AMOUNT VARCHAR(512),
  M1 DECIMAL(16,2) DEFAULT 0,  
M2 DECIMAL(16,2) DEFAULT 0,
M3 DECIMAL(16,2) DEFAULT 0,
M4 DECIMAL(16,2) DEFAULT 0,
M5 DECIMAL(16,2) DEFAULT 0,
M6 DECIMAL(16,2) DEFAULT 0,
M7 DECIMAL(16,2) DEFAULT 0,
M8 DECIMAL(16,2) DEFAULT 0,
M9 DECIMAL(16,2) DEFAULT 0,
M10 DECIMAL(16,2) DEFAULT 0,
M11 DECIMAL(16,2) DEFAULT 0,
M12 DECIMAL(16,2) DEFAULT 0,	
  M13 DECIMAL(16,2) DEFAULT 0
); 	
-- 打开游标
OPEN cursor_prePayTax;
looplabel:
LOOP
	FETCH cursor_prePayTax INTO  v_tax_pay_sub,v_fillValue,v_valueType,v_tax_pay_name,v_bukrs,v_zbukrs,v_zywlx,v_zheadnum,v_zheadname,
	v_zdisnum,v_zdisname,v_ywlxmc,v_butxt,v_GJAHR,v_MONAT;
	IF not_found = 1  THEN 
		LEAVE looplabel ;
	END IF ;
			-- 判断临时表中是否有该纳税主体
			SELECT COUNT(1) FROM tmp_prePayTax WHERE TAX_PAY_SUB = v_tax_pay_sub INTO v_tps_count;
			-- v_tps_count = 0 插入
			IF(v_tps_count = 0) THEN
				INSERT INTO tmp_prePayTax(ZYWLX,ZHEADNUM,ZHEADNAME,ZDISNUM,ZDISNAME,ZBUKRS,BUKRS,BUTXT,TAX_PAY_SUB,TAX_PAY_NAME,YWLXMC) 
					VALUES(v_zywlx,v_zheadnum,v_zheadname,v_zdisnum,v_zdisname,v_zbukrs,v_bukrs,v_butxt,v_tax_pay_sub,v_tax_pay_name,v_ywlxmc);
			ELSE
				-- 处理业务数据 1-12月数据更新
				IF (v_MONAT = '01')
					THEN UPDATE tmp_prePayTax SET M1 = IFNULL(v_fillValue,0) WHERE TAX_PAY_SUB = v_tax_pay_sub;
				ELSEIF (v_MONAT = '02') 
					THEN UPDATE tmp_prePayTax SET M2 = IFNULL(v_fillValue,0) WHERE TAX_PAY_SUB = v_tax_pay_sub;
				ELSEIF (v_MONAT = '03') 
					THEN UPDATE tmp_prePayTax SET M3 = IFNULL(v_fillValue,0) WHERE TAX_PAY_SUB = v_tax_pay_sub;
				ELSEIF (v_MONAT = '04') 
					THEN UPDATE tmp_prePayTax SET M4 = IFNULL(v_fillValue,0) WHERE TAX_PAY_SUB = v_tax_pay_sub;	
				ELSEIF (v_MONAT = '05' ) 
					THEN UPDATE tmp_prePayTax SET M5 = IFNULL(v_fillValue,0) WHERE TAX_PAY_SUB = v_tax_pay_sub;	
				ELSEIF (v_MONAT = '06') 
					THEN UPDATE tmp_prePayTax SET M6 = IFNULL(v_fillValue,0) WHERE TAX_PAY_SUB = v_tax_pay_sub;
				ELSEIF (v_MONAT = '07' ) 
					THEN UPDATE tmp_prePayTax SET M7 = IFNULL(v_fillValue,0) WHERE TAX_PAY_SUB = v_tax_pay_sub;	
				ELSEIF (v_MONAT = '08') 
					THEN UPDATE tmp_prePayTax SET M8 = IFNULL(v_fillValue,0) WHERE TAX_PAY_SUB = v_tax_pay_sub;
				ELSEIF (v_MONAT = '09') 
					THEN UPDATE tmp_prePayTax SET M9 = IFNULL(v_fillValue,0) WHERE TAX_PAY_SUB = v_tax_pay_sub;
				ELSEIF (v_MONAT = '10') 
					THEN UPDATE tmp_prePayTax SET M10 = IFNULL(v_fillValue,0) WHERE TAX_PAY_SUB = v_tax_pay_sub;	
				ELSEIF (v_MONAT = '11') 
					THEN UPDATE tmp_prePayTax SET M11 = IFNULL(v_fillValue,0) WHERE TAX_PAY_SUB = v_tax_pay_sub;
				ELSEIF (v_MONAT = '12') 
					THEN UPDATE tmp_prePayTax SET M12 = IFNULL(v_fillValue,0) WHERE TAX_PAY_SUB = v_tax_pay_sub;
				END IF;
			END IF;
	SET not_found = 0;
END LOOP looplabel;			
CLOSE cursor_prePayTax;
-- 返回结果
IF(p_query_type = 0) THEN 
	SELECT COUNT(1) FROM tmp_prePayTax;
ELSEIF(p_query_type = 1) THEN 
	SELECT * FROM tmp_prePayTax LIMIT p_pagestart,p_pageend;
END IF;
END$$

DELIMITER ;


/////

// mybatis 调用
<select id="queryTaxAmountSummary" statementType="CALLABLE" resultType="java.util.Map">
		{
			call proc_queryPrePayTaxReport(
				#{param.ZYWLX},
				#{param.ZHEADNUM},
				#{param.ZDISNUM},
				#{param.ZBUKRS},
				#{param.BUKRS},
				#{param.TAX_PAY_SUB},
				#{param.WARN_VALUE},
				#{param.userCode},
				#{param.fisrDayOfJanuary},
				#{param.periodStart},
				'1',
				#{pageStart},
				#{pageSize}
			)
		}
	</select>
分享到:
评论

相关推荐

    mysql存储过程教程

    MySQL存储过程是数据库管理系统中的一种重要功能,它允许开发者预编译一系列SQL语句并封装成一个可重复使用的单元,从而提高数据处理的效率和代码的复用性。本教程将深入探讨MySQL存储过程的创建、调用以及相关概念...

    mysql存储过程之返回多个值的方法示例

    本文实例讲述了mysql存储过程之返回多个值的方法。分享给大家供大家参考,具体如下: mysql存储函数只返回一个值。要开发返回多个值的存储过程,需要使用带有INOUT或OUT参数的存储过程。咱们先来看一个orders表它的...

    mysql经典教程+mysql存储过程讲解

    本教程结合"mysql经典教程+mysql存储过程讲解"的主题,将深入探讨MySQL的基础知识以及核心特性——存储过程。 首先,我们需要理解什么是数据库。数据库是一个组织和存储数据的系统,允许用户以结构化方式访问和管理...

    MySQL存储过程的异常处理方法

    本实例展示了如何在MySQL存储过程中实现异常处理,以捕获并处理可能出现的错误。 首先,我们注意到在创建存储过程`myProc`时,使用了`delimiter $$`来改变MySQL客户端的语句分隔符,这是为了在存储过程中使用多个...

    Java实现调用MySQL存储过程详解

    总的来说,Java通过JDBC调用MySQL存储过程涉及到连接数据库、创建`CallableStatement`、执行存储过程和处理结果。这使得开发者能够在Java应用中灵活地利用数据库提供的强大功能,实现更高效的数据处理。

    Mysql存储过程常用语句模板

    Mysql存储过程常用语句模板(含变量,if,三种循环等等) Mysql存储过程常用语句模板(含变量,if,三种循环等等) Mysql存储过程常用语句模板(含变量,if,三种循环等等) Mysql存储过程常用语句模板(含变量,if,三...

    mysql中文手册+mysql命令大全+mysql存储过程

    最后,"mysql存储过程.pdf"专注于MySQL的存储过程。存储过程是预编译的SQL语句集合,可以提高数据库操作的性能,减少网络流量,并增强数据安全。在PDF文档中,你将学习如何定义、调用和管理存储过程,以及如何使用...

    MySQL存储过程编程.pdf

    MySQL 存储过程编程 MySQL 存储过程编程是指在 MySQL 数据库中使用存储过程来实现业务逻辑的编程技术。存储过程是一种可以在数据库中存储和执行的程序单元,它可以实现复杂的业务逻辑和数据处理操作。 在 MySQL ...

    MySQL存储过程学习

    MySQL存储过程是数据库管理系统中的一种重要功能,它允许开发者预编译一系列的SQL语句,形成一个可重复使用的代码块,以提高数据处理的效率和应用程序的性能。在这个"MySQL存储过程学习"的主题中,我们将深入探讨...

    MySQL 存储过程入门到精通

    MySQL存储过程是数据库管理系统中的一个重要特性,它允许程序员或数据库管理员预先定义一组SQL语句,形成一个可重用的逻辑单元。在这个“MySQL存储过程入门到精通”资料中,你将深入理解存储过程的原理、创建、调用...

    c++实现调mysql存储过程

    c++实现调mysql存储过程,实现存储过程的出参入参,可以支持查询多数据返回,还有存储过程的复杂数据的增删改等

    mysql存储过程调试工具

    MySQL存储过程是数据库管理系统中的一种重要功能,它允许开发者编写一系列复杂的SQL语句,并作为一个单元进行执行,提高代码复用性和效率。然而,与普通的编程语言一样,存储过程的调试同样至关重要,因为错误的存储...

    mysql存储过程实例

    MySQL 存储过程实例 MySQL 存储过程实例详细介绍了 MySQL 存储过程的开发步骤,本节将通过具体的实例讲解 PHP 是如何操纵 MySQL 存储过程的。 创建存储过程 存储过程的创建是 MySQL 存储过程的基础,MySQL 5.0 ...

    mysql存储过程实现分页

    ### MySQL存储过程实现分页 #### 背景与需求 在数据库操作中,分页是一种常见的需求,尤其是在处理大量数据时。通过分页技术,可以有效地减少每次查询的数据量,提高系统的响应速度和用户体验。MySQL作为一种广泛...

    mysql 存储过程 实战

    ### MySQL存储过程实战知识点 #### 一、存储过程概述 MySQL 存储过程是一种预编译的 SQL 脚本,它可以包含复杂的逻辑控制结构、循环等操作,并且可以接受参数,执行完后还可以返回结果。存储过程可以提高数据处理...

    MySQL存储过程编程教程.pdf

    MySQL存储过程编程是数据库应用开发中的一个重要环节,它可以帮助开发者将一系列的数据库操作封装起来,以提高程序的可维护性和运行效率。在MySQL 5.0及以上版本中,存储过程、函数和触发器的支持为数据库提供了更...

Global site tag (gtag.js) - Google Analytics