DELIMITER $$ #改动分隔符为 $$ DROP PROCEDURE IF EXISTS sp_MvcCommonDataSource$$ #分隔符 CREATE PROCEDURE sp_MvcCommonDataSource ( #输入參数 _fields VARCHAR(2000), #要查询的字段,用逗号(,)分隔 _tables TEXT, #要查询的表 _where VARCHAR(2000), #查询条件 _orderby VARCHAR(200), #排序规则 _pageindex INT, #查询页码 _pageSize INT, #每页记录数 _sumfields VARCHAR(200),#求和字段 #输出參数 OUT _totalcount INT, #总记录数 OUT _pagecount INT, #总页数 OUT _sumResult VARCHAR(2000)#求和结果 ) BEGIN #140529-xxj-分页存储过程 #计算起始行号 SET @startRow = _pageSize * (_pageIndex - 1); SET @pageSize = _pageSize; SET @rowindex = 0; #行号 #合并字符串 SET @strsql = CONCAT( #'select sql_calc_found_rows @rowindex:=@rowindex+1 as rownumber,' #记录行号 'select sql_calc_found_rows ' ,_fields ,' from ' ,_tables ,CASE IFNULL(_where, '') WHEN '' THEN '' ELSE CONCAT(' where ', _where) END ,CASE IFNULL(_orderby, '') WHEN '' THEN '' ELSE CONCAT(' order by ', _orderby) END ,' limit ' ,@startRow ,',' ,@pageSize ); PREPARE strsql FROM @strsql;#定义预处理语句 EXECUTE strsql; #运行预处理语句 DEALLOCATE PREPARE strsql; #删除定义 #通过 sql_calc_found_rows 记录没有使用 limit 语句的记录,使用 found_rows() 获取行数 SET _totalcount = FOUND_ROWS(); #计算总页数 IF (_totalcount <= _pageSize) THEN SET _pagecount = 1; ELSE IF (_totalcount % _pageSize > 0) THEN SET _pagecount = _totalcount / _pageSize + 1; ELSE SET _pagecount = _totalcount / _pageSize; END IF; END IF; #计算求和字段 IF (IFNULL(_sumfields, '') <> '') THEN #序列sum结果 SET @sumCols = CONCAT ( 'CONCAT_WS(\',\',' ,'SUM(' ,REPLACE(_sumfields,',','),SUM(') ,'))'); #拼接字符串 SET @sumsql = CONCAT( 'select ' ,@sumCols ,' INTO @sumResult from ' ,_tables ,CASE IFNULL(_where, '') WHEN '' THEN '' ELSE CONCAT(' where ', _where) END ,';' ); #select @sumsql; PREPARE sumsql FROM @sumsql;#定义预处理语句 EXECUTE sumsql; SET _sumResult = @sumResult; #运行预处理语句 DEALLOCATE PREPARE sumsql; #删除定义 END IF; END$$ DELIMITER ; #改动分隔符为分号(;) ################################################## # 測试存储过程 #select order_no,order_date,order_type from `order`; CALL sp_MvcCommonDataSource( 'order_no,order_date,order_type'#查询字段 ,'`order`'#表名 ,'1=1'#条件 ,'order_no asc'#排序 ,2 #页码 ,3 #每页记录数 ,'order_no,order_no'#求和字段 ,@totalcount #输出总记录数 ,@pagecount #输出用页数 ,@sumResult #求和结果 ); SELECT @totalcount,@pagecount,@sumResult;
相关文章
- 07-09汽车免拆诊断案例 | 2016款保时捷Macan车发动机故障灯异常点亮-故障现象 一辆2016款保时捷Macan车,搭载CYP发动机,累计行驶里程约为11.2万km。车主进厂反映,发动机故障灯异常点亮。 故障诊断 接车后试车,发动机怠速无明显异常,组合仪表上的发动机故障灯异常点亮。用故障检测仪检测,发现发动机控制单元(DME)中存储有故障代码“P11A600 气缸2排气门升程调节A-信号不可信”(图1)。 图1DME中存储的故障代码 查看维修资料得知,该车发动机进气门的气门升程不可以调节,但排气门的气门升程可以进行两级调节,工作原理与奥迪可变气门升程系统(AVS)一样。如图2所示,凸轮块安装在排气凸轮轴上,可以轴向移动。紧密相邻的是2个外形不同的凸轮,一个升程小,一个升程大。改变凸轮块位置,就可以按负荷状态来控制排气门的升程。 图2排气凸轮轴的结构 凸轮块的轴向移动由2个带金属销的升程调节执行元件控制。如图3所示,左侧凸轮轴调节执行元件工作,伸出金属销,插在凸轮块上的螺旋凹槽内;由于凸轮轴调节执行元件的位置是固定的,随着凸轮轴转动,伸到螺旋滑槽内的金属销迫使凸轮块左移,与气门摇臂滚子接触的凸轮由大升程凸轮切换至小升程凸轮;凸轮切换完成后,依靠螺旋滑槽轮廓迫使金属销回位。同理,右侧凸轮轴调节执行元件工作,凸轮块右移,气门摇臂滚子接触的凸轮由小升程凸轮切换至大升程凸轮。 图3气门升程的调节过程 值得注意的是,升程调节执行元件工作时伸出金属销,停止工作时金属销无法自动回位,是依靠螺旋滑槽轮廓迫使金属销回位的,且在回位瞬间,随着升程调节执行元件内部永久磁铁(图4)的运动,电磁线圈感应出一个电压信号(图5),并反馈给DME,DME据此判断金属销已回位。 图4升程调节执行元件内部结构示意 图5升程调节执行元件控制线上波形示意 如图6所示,凸轮轴轴承起到挡块的作用,限制凸轮块的行程,同时凸轮轴内有一个弹簧加载的钢珠,用于调节完成后锁止凸轮块。 图6凸轮块限位和锁止结构 正常情况下,起动时使用大升程凸轮,小负荷时使用小升程凸轮,大负荷时使用大升程凸轮,熄火时切换至大升程凸轮。如果一个或多个升程调节执行元件失效了,那么DME首先会多次试图去切换到另一个凸轮轮廓。如果无法实现这个调整,那么这个无法调节的凸轮块就保持原位,所有其他的凸轮块都会切换到大升程的凸轮轮廓上。 了解该车排气门的气门升程调节原理后,再来分析故障代码“P11A600 气缸2排气门升程调节A-信号不可信”,推断气缸2排气门的气门升程调节A(负责调节气门小升程)异常,可能的故障原因有:升程调节执行元件A损坏;凸轮块损坏;相关电路故障;DME损坏。 用虹科pico示波器同时测量气缸2的2个升程调节执行元件控制线上的波形(图7),发现升程调节执行元件A连续工作3次后,升程调节执行元件B(负责调节气门大升程)工作1次。 图7 起动发动机时气缸2的2个升程调节执行元件控制线上的波形 放大升程调节执行元件B控制线上的波形(图8),有明显的回位信号,正常。 图8放大后的升程调节执行元件B控制线上的波形 放大升程调节执行元件A控制线上的波形(图9),发现回位信号出现在DME停止控制的瞬间,由此推断升程调节执行元件A停止工作后金属销立即回位,异常。 图9放大后的升程调节执行元件A控制线上的波形 测量气缸1的2个升程调节执行元件控制线上的波形(图10),发现升程调节执行元件B和升程调节执行元件A交替工作3次,且均有明显的回位信号。诊断至此,确定气缸2的升程调节执行元件A工作异常。 图10起动发动机时气缸1的2个升程调节执行元件控制线上的波形 测量气缸2的升程调节执行元件A供电、控制信号及电流波形(图11),发现供电正常,工作电流约为1.2 A,也正常。与其他气缸的相关波形进行对比,发现就是升程调节执行元件A的回位信号位置不对,由此排除升程调节执行元件A及其相关电路故障,推断故障发生在机械部分。 图11气缸2的升程调节执行元件A供电、控制信号及电流波形 拆下气缸1和气缸2的升程调节执行元件(图12),从安装孔观察发现,气缸1和气缸2的凸轮块位置不一致。 图12拆下气缸1和气缸2的升程调节执行元件 拆下气门室罩盖(图13),发现气缸1的凸轮块处于小升程位置,其他气缸的凸轮块均处于大升程位置,且气缸1和气缸3均掉落1个排气门摇臂,其中气缸3掉落的气门摇臂,刚好卡在了气缸2与气缸3的凸轮块之间(图14)。 图13 拆下气门室罩盖 图14 摇臂卡在气缸2与气缸3的凸轮块之间 由此推断这影响了气缸2凸轮块的移动,以致气缸2的升程调节执行元件A工作异常。进一步检查发现,凸轮磨损严重,且掉落的气门摇臂的滚子轴承损坏。 故障排除 更换气门摇臂和排气凸轮轴后试车,故障未再出现,故障排除。 杭州捷盛行汽车服务有限公司 乐 翔
- 07-09【MySQL】逻辑架构与存储引擎
- 07-09MySQL 存储引擎&事务-一、MySQL 存储引擎
- 07-09Java面试八股之MySQL存储引擎都有哪些-TokuDB
- 07-09Mysql的底层实现逻辑-数据选用B+树结构存储数据,其中树的每一个节点是一个page页。
- 07-09Mysql的 存储过程(procedure)
- 07-09【数据库】MySQL分页查询
- 07-09SQL Server创建存储过程
- 07-09TorchV的RAG实践分享(三):解析llama_index的数据存储结构和召回策略过程
- 07-09MySQL数据库存储过程介绍