存储函数简单示例

CREATE DEFINER=`root`@`localhost` FUNCTION `getAuditDeptFillStatus`(`taskId` varchar(2000),`deptId` varchar(2000),`aduitDeptId` varchar(2000)) RETURNS int
    READS SQL DATA
BEGIN
    DECLARE quotaNum INTEGER;      # 指标数量
		DECLARE fillQuotaNum INTEGER;      # 指标数量
		select count(*) into quotaNum from department_performance_assessment_quota_item_info where id in (select quota_id from department_performance_assessment_task_quota where task_id = taskId) AND quota_type = '1';
		
		select count(*) into fillQuotaNum from department_performance_assessment_task_expert_fiill_result where task_id = taskId and dept_id = deptId and fill_type = '2' and fill_source = aduitDeptId and fill_status = '1' and quota_id in (select quota_id from department_performance_assessment_task_quota where task_id = taskId);
    IF quotaNum <= fillQuotaNum THEN
			RETURN 1;  
		ELSE
			RETURN 0;  
		END IF;
END
CREATE DEFINER=`root`@`localhost` FUNCTION `getDeptQuotaFinalScoreLevelInTask`(`taskId` varchar(2000),`deptId` varchar(2000),`quotaId` varchar(2000),`score` NUMERIC,`minA` NUMERIC(12,4),`minB` NUMERIC(12,4),`minC` NUMERIC(12,4)) RETURNS varchar(2000) CHARSET utf8
    READS SQL DATA
BEGIN
    DECLARE scoreLevel VARCHAR(2000); 
		DECLARE minA VARCHAR(2000);
		DECLARE minB VARCHAR(2000);
		DECLARE minC VARCHAR(2000);
		SET scoreLevel = '-';
		IF(score IS null) THEN
			return scoreLevel;
		ELSE
			IF(score >= minA) Then
				return 'A';
			END IF;
			IF(score >= minB) Then
				return 'B';
			END IF;
			IF(score >= minC) Then
				return 'C';
			END IF;
			return 'D';
		END IF;    
END
CREATE DEFINER=`root`@`localhost` FUNCTION `getParentNodeList`(`nodeId` varchar(2000)) RETURNS varchar(2000) CHARSET utf8
    READS SQL DATA
BEGIN
    DECLARE parentList VARCHAR(2000);      # 返回父节点结果集
    DECLARE tempParent VARCHAR(2000);      # 临时存放父节点
		DECLARE lastParent VARCHAR(2000);      # 临时存放父节点

    SET parentList = '';
		SET lastParent = '';
    SET tempParent = nodeId; 

    WHILE (tempParent is not null and tempParent != ''  and lastParent != tempParent) DO        # 循环,用于查询节点上所有的父节点
        SET parentList = CONCAT(tempParent, ',', parentList);   # 存入到返回结果中
				SET lastParent = tempParent;
        SELECT parent_id INTO tempParent FROM department_performance_assessment_quota_item_info where id = lastParent;   # 查询节点上所有父节点
    END WHILE;
    RETURN SUBSTRING(parentList, 1);       # 将返回结果处理,截取掉结果集前面的逗号
END
CREATE DEFINER=`root`@`localhost` FUNCTION `getParentNodeNameWithType`(`nodeId` varchar(2000),`nodeLevel` varchar(2000)) RETURNS varchar(2000) CHARSET utf8
    READS SQL DATA
BEGIN
    DECLARE tempParent VARCHAR(2000);      # 临时存放父节点
		DECLARE tempQuotaNmae VARCHAR(2000);      # 临时存放父节点
		DECLARE tempParentType VARCHAR(2000);      # 临时存放父节点类型
		DECLARE lastParent VARCHAR(2000);      # 临时存放父节点

		SET lastParent = '';
		SET tempParentType = '';
    SET tempParent = nodeId; 

    WHILE (tempParent is not null and tempParent != ''  and lastParent != tempParent and tempParentType != nodeLevel) DO        # 循环,用于查询节点上所有的父节点
				SET lastParent = tempParent;
        SELECT parent_id,quota_level,quota_name INTO tempParent,tempParentType,tempQuotaNmae FROM department_performance_assessment_quota_item_info where id = lastParent;   # 查询节点上所有父节点
    END WHILE;
		IF(tempParentType = nodeLevel) THEN
		
     RETURN tempQuotaNmae;       # 将结果返回
		ELSE
			RETURN '';
		END IF;
END
CREATE DEFINER=`root`@`localhost` FUNCTION `getQuotaDeptScoreInTask`(`deptId` varchar(2000),`quotaId` varchar(2000),`taskId` varchar(2000),`type` varchar(20)) RETURNS decimal(12,4)
    READS SQL DATA
BEGIN
    DECLARE finishScore NUMERIC(12,4);      # 最终得分
		DECLARE sumScore1 NUMERIC(10,2);  #定量得分
		DECLARE sumGoalScore1 NUMERIC(10,2);  #定量得分标准
		DECLARE num1 NUMERIC(10,2);  #定量指标数
		DECLARE sumScore2 NUMERIC(10,2);	#定性得分
		DECLARE sumGoalScore2 NUMERIC(10,2);	#定性得分标准
		DECLARE num2 NUMERIC(10,2);  #定性指标数
		IF(type = '1') THEN  #按分数计算分数
			select count(*),0.4*a.leader_assessment_score+0.5*a.customer_assessment_score+0.1*(select AVG(b.total_assessment_score) from department_performance_assessment_task_expert_fiill_result b where b.task_id = a.task_id and b.dept_id = a.dept_id and b.fill_type = '1' and b.quota_id =a.quota_id) into num2,sumScore2 from department_performance_assessment_task_fiill_result a where a.fill_status = '2'
and a.task_id = taskId and a.dept_id = deptId and a.quota_id in (select c.id from department_performance_assessment_quota_item_info c where c.quota_type = '1') and FIND_IN_SET(quotaId,getParentNodeList(a.quota_id));
			select count(*), SUM(a.goal_score), SUM(a.finish_score) into num1,sumGoalScore1,sumScore1 from department_performance_assessment_task_fiill_result a where a.fill_status = '2' and a.task_id = taskId and a.dept_id = deptId and a.quota_id in (select id from department_performance_assessment_quota_item_info where quota_type = '2') and FIND_IN_SET(quotaId,getParentNodeList(a.quota_id));
			IF(num1 > 0 && num2 = 0) THEN
				return sumScore1;
			ELSE IF(num1 = 0 && num2 > 0) THEN
				return sumScore2;
			ELSE
				return 0.7*sumScore1 + 0.3*sumScore2;
			END IF;
			END IF;
		ELSE #按百分比计算分数
			select sum(finish_score)/sum(goal_score) into finishScore from department_performance_assessment_task_fiill_result where fill_status = '2'
and task_id = taskId and dept_id = deptId and quota_id in (select id from department_performance_assessment_quota_item_info where quota_type = '2') and FIND_IN_SET(quotaId,getParentNodeList(quota_id));
				return finishScore;
		END IF;
END
CREATE DEFINER=`root`@`localhost` FUNCTION `getRootNode`(`nodeId` varchar(2000)) RETURNS varchar(2000) CHARSET utf8
    READS SQL DATA
BEGIN
    DECLARE parentNode VARCHAR(2000);      # 返回父节点结果集
    DECLARE tempParent VARCHAR(2000);      # 临时存放父节点

    SET parentNode = '';
    SET tempParent = nodeId; 
    WHILE (tempParent is not null and tempParent != '' and parentNode != tempParent)  DO        # 循环,用于查询节点上所有的父节点
        SET parentNode = tempParent;   # 存入到返回结果中
        SELECT parent_id INTO tempParent FROM department_performance_assessment_quota_item_info where id = tempParent;   # 查询节点的父节点
    END WHILE;
    RETURN parentNode;       # 将返回结果处理,截取掉结果集前面的逗号
END
CREATE DEFINER=`root`@`localhost` FUNCTION `getStatus`(`p_year` VARCHAR ( 10 ), `p_majorId` VARCHAR ( 100 ), `p_tableName` VARCHAR ( 100 )) RETURNS varchar(4) CHARSET utf8mb4
    READS SQL DATA
BEGIN
	DECLARE rtn VARCHAR ( 4 );
	SELECT approval_status INTO rtn FROM ct_major_report_reason a WHERE a.major_id = p_majorId  AND a.YEAR = p_year AND a.table_name =p_tableName;
	IF( rtn = '0' ) THEN	
			SET rtn = '1';
		ELSE
	    IF( rtn = '1' ) THEN
				SET rtn = '2';
			ELSE 
			  IF( rtn = '99' || rtn IS NULL ) THEN
					  SET rtn = 'cant use sql';
				  ELSE 
					  SET rtn = 'err';
			END IF;
		END IF;
	END IF;
	RETURN rtn;
	
END
CREATE DEFINER=`root`@`localhost` FUNCTION `queryParentNodeList`(`nodeId` varchar(2000)) RETURNS longtext CHARSET utf8
    READS SQL DATA
BEGIN
    DECLARE parentList LONGTEXT;      # 返回父节点结果集
    DECLARE tempParent VARCHAR(2000);      # 临时存放父节点
		DECLARE lastParent VARCHAR(2000);      # 临时存放父节点

    SET parentList = '';
    SET tempParent = nodeId; 

    WHILE (tempParent is not null and tempParent != ''  and lastParent != tempParent) DO        # 循环,用于查询节点上所有的父节点
        SET parentList = CONCAT(tempParent, ',', parentList);   # 存入到返回结果中
				SET lastParent = tempParent;
        SELECT parent_id INTO tempParent FROM department_performance_assessment_quota_item_info where id = lastParent;   # 查询节点上所有父节点
    END WHILE;
    RETURN SUBSTRING(parentList, 2);       # 将返回结果处理,截取掉结果集前面的逗号
END
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值