MySql存储过程及调用
来源:互联网 发布:淘宝怎么找类似店铺 编辑:程序博客网 时间:2024/05/29 19:25
存储过程:
CREATE PROCEDURE `select_AppraiseShow_Panel3_2`(IN p_id INT,IN year_start VARCHAR(20),IN year_over VARCHAR(20),IN selUnit varchar(50),IN pageNo INTEGER,IN pageSize INTEGER,OUT totalSize INTEGER)BEGINDECLARE idx INT DEFAULT 0;-- 表名标号DECLARE t_name VARCHAR(50); -- 拼接后的表名DECLARE t_tabYoN VARCHAR(10);-- 是否有这张表-- DECLARE error_num INTEGER DEFAULT 0; -- 是否有错误发生-- DECLARE CONTINUE HANDLER FOR SQLEXCEPTION SET error_num=1;DECLARE sqlStr varchar(4000) default ''; -- 拼接SQLDECLARE sqlStr2 VARCHAR(4000) DEFAULT '';DECLARE $start INTEGER DEFAULT 0;-- START TRANSACTION;-- 开启事务IF p_id=1 THEN-- year_start ==> 2017-02-13set t_name = CONCAT('t_ace_appraise_',LEFT(year_start,4),SUBSTR(year_start,6,2));IF EXISTS (SELECT 1 FROM information_schema.`TABLES` where TABLE_NAME=t_name) THENSET sqlStr = CONCAT(sqlStr,"select CONCAT('",year_start," ',LPAD(T.stime,2,'0'),'时') as stime,T.description,count(T.pk_id) as counts", " from","("," select o.pk_id,hour(o.stime) as stime,o.u_pk,seu.description"," from t_ace_appraise_",LEFT(year_start,4),SUBSTR(year_start,6,2)," as o RIGHT JOIN t_setup_unit as seu on o.u_pk=seu.pk_id and seu.id LIKE '%",selUnit,"%'"," where o.stime<='",year_over," 23:59:59' and o.stime>='",year_start," 00:00:00' and o.ace15Ld4 > 0 and o.remission = 0 "," ) as T", " group by t.u_pk,T.stime ORDER BY t.u_pk,t.stime");END IF;END IF;IF p_id=3 THENloop_num:LOOPset idx=idx+1;set t_name = CONCAT('t_ace_appraise_',year_start,LPAD(idx,2,'0'));IF EXISTS (select 1 FROM information_schema.`TABLES` WHERE table_name=t_name) THENset sqlStr = CONCAT(sqlStr," select CONCAT('",year_start,"-',LPAD(T.stime,2,'0')) as stime,T.description,count(T.pk_id) as counts"," from"," (select o.pk_id,month(o.stime) as stime,o.u_pk,tsu.description"," from ",t_name," as o"," RIGHT JOIN t_setup_unit tsu on o.u_pk = tsu.pk_id AND tsu.id like '%",selUnit,"%'"," where o.stime<='",year_over,"-",LPAD(idx,2,'0'),"-31 23:59:59' and o.stime>='",year_start,"-",LPAD(idx,2,'0'),"-01 00:00:00' and o.ace15Ld4 > 0 and o.remission = 0 "," ) as T group by t.u_pk,T.stime"); set sqlStr = CONCAT(sqlStr,' UNION ALL');END IF;IF idx>12 THENLEAVE loop_num;END IF;END LOOP;set sqlStr = LEFT(sqlStr,LENGTH(sqlStr)-9);set sqlStr = CONCAT('select Y.stime,Y.description,Y.counts from (',sqlStr,') as Y order by Y.description,Y.stime asc'); END IF;-- 计算总数SET sqlStr2 = CONCAT("select count(*) into @totalSize from (",sqlStr,") as tc");set @sql2 = sqlStr2;PREPARE stat2 FROM @sql2;EXECUTE stat2;DEALLOCATE PREPARE stat2;-- 设置分页IF pageNo IS NOT NULL AND pageSize IS NOT NULL AND pageSize!=-1 THENIF pageNo < 0 THEN SET pageNo = 0; END IF;IF pageSize < 0 THEN SET pageSize = 10; END IF;SET $start = (pageNo-1)*pageSize;-- SET $start = pageNo;SET sqlStr = CONCAT(sqlStr," limit ",$start,",",pageSize);END IF;-- 获取列表 set @sql1 = sqlStr;PREPARE stat FROM @sql1;EXECUTE stat;DEALLOCATE PREPARE stat;SET totalSize = @totalSize;-- 判断中途是否出错-- IF error=1 THEN-- ROLLBACK;-- ELSE-- COMMIT;-- END IF;END调用:
public PageResult<List<Map<String, Object>>> callProcedureForPagedata1(String procName, Map<String, Object> inParams,Map<String, Integer> outParams) throws SQLException {Connection con = SessionFactoryUtils.getDataSource(getSessionFactory()).getConnection();ResultSet rs = null;CallableStatement call = con.prepareCall("{CALL " + procName + "}");// 设置输入参数if (inParams != null && !inParams.isEmpty()) {for (String one : inParams.keySet()) {call.setObject(one, inParams.get(one));}}// 注册输出参数outParams.put("totalSize", Types.INTEGER);if (outParams != null && !outParams.isEmpty()) {for (String one : outParams.keySet()) {call.registerOutParameter(one, outParams.get(one));}}call.execute();rs = call.getResultSet();// 获取查询结果集List<Object> list = new ArrayList<Object>();// 将结果集封装出List类型的集合while (rs != null && rs.next()) {Map<String, Object> rowData = new HashMap<String, Object>();ResultSetMetaData md = (ResultSetMetaData) rs.getMetaData();int columnCount = md.getColumnCount();for (int i = 1; i <= columnCount; i++) {rowData.put(md.getColumnLabel(i), rs.getObject(i));}list.add(rowData);}long totalSize = call.getLong("totalSize");// 总记录数的输出参数int pageNo = inParams.get("pageNo") == null ? 0 : (int) inParams.get("pageNo");int pageSize = (int) (inParams.get("pageSize") == null ? totalSize : (int) inParams.get("pageSize"));PageResult<List<Map<String, Object>>> pageResult = new PageResult(pageNo, totalSize, pageSize, list);// 释放资源call.close();con.close();return pageResult;}
阅读全文
0 0
- mysql存储过程及调用
- MySql存储过程及调用
- mysql存储过程及c#调用标准版
- MySQL存储过程的创建及调用
- mysql存储过程学习及java调用存储过程
- mysql存储过程学习及java调用存储过程
- mysql存储过程学习及java调用存储过程
- mysql存储过程及java调用存储过程
- mysql存储过程学习及java调用存储过程
- MySQL存储过程及java中存储过程的调用
- mysql存储过程学习及java调用存储过程
- mysql存储过程调用
- MySQL++调用存储过程
- 调用mysql存储过程
- mysql 调用存储过程
- MySQL调用存储过程
- MYSQL中存储过程的创建,调用及语法
- 简单的存储过程编写及MySQL中event调用
- 栈实现括号匹配
- 十六进制转十进制
- ortp库移植到arm平台进行文件传输测试
- mysql主从复制
- 1006. Sign In and Sign Out (25)
- MySql存储过程及调用
- SQLServer实现Oracle中的translate函数
- Java内存管理个人理解
- java23种设计模式概览
- 三种LCA算法(二):Tarjan算法
- IDEA get/set/重写equals()、hashcode()\toString()等 方法快捷键
- Hibernate基本原理
- 遍历集合的三种方法
- 78 Subsets