您的位置:首页 > 数据库

第一个存储过程,写了很长时间,记录一下

2016-11-29 15:57 274 查看
BEGIN
DECLARE
done INT DEFAULT 0;
DECLARE
cur_id VARCHAR(34);
DECLARE
cur_project_num VARCHAR(20);
DECLARE
cur_project_type_id VARCHAR(34);
DECLARE
cur_project_type_name VARCHAR(34);
DECLARE cur_project_name VARCHAR(100);
DECLARE cur_create_time TIMESTAMP;
DECLARE cur_tickets INT;
DECLARE cur_score FLOAT;
DECLARE cur_project_imgs TEXT;
DECLARE cur_project_recommend VARCHAR(100);
DECLARE cur_project_check_advice VARCHAR(100);
DECLARE cur_my_score FLOAT;
DECLARE cur_check_user_id VARCHAR(34);
DECLARE cur_my_user_id VARCHAR(34);
DECLARE cur_grade_id VARCHAR(34);
DECLARE cur_user_name VARCHAR(34);
DECLARE cur_grade_name VARCHAR(34);
DECLARE cur_class_name VARCHAR(34);
DECLARE calsql VARCHAR(500);
DECLARE calsqlcount VARCHAR(500);
#...创建游标
DECLARE cur_project CURSOR FOR
SELECT pro.id,
pro.project_num,
pro.project_type_id,
pro.project_name,
pro.create_time,
pro.tickets,
pro.score,
pro.project_imgs,
pro.project_recommend,
pro.project_check_advice,
IFNULL(R.project_score,-1) AS 'my_score',
pro.check_user_id,
R.user_id AS 'my_user_id',
pro.grade_id,
pro.user_name,
prot.project_type_name,
pro.grade_name,
pro.class_name
FROM project pro
LEFT JOIN activity act
ON pro.activity_id = act.id
LEFT JOIN project_type prot
ON pro.project_type_id = prot.id
LEFT JOIN(
SELECT proc.project_id,
proc.project_score,
proc.user_id
FROM project_score proc
WHERE proc.user_id = in_user_id)R
ON pro.id = R.project_id
WHERE act.id = in_activity_id
AND act.selection_state = 1
AND pro.project_check_state = 1;
DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = 1;
CREATE TEMPORARY TABLE IF NOT EXISTS temp_project (  
`id` VARCHAR(34) NOT NULL COMMENT '作品主键;',
`project_num` VARCHAR(20) NOT NULL COMMENT '作品编号;',
`project_type_id` varchar(34) NOT NULL DEFAULT '1' COMMENT '作品类型编号,与作品类型表[project_type_id]关联',
`project_type_name` varchar(34) NOT NULL DEFAULT '1' COMMENT '作品类型名称',
`project_name` VARCHAR(100) NOT NULL COMMENT '作品名称',
`create_time` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`tickets` INT(11) DEFAULT '0' COMMENT '作品得票数',
`score` FLOAT DEFAULT '0' COMMENT '作品平均分',
`my_score` FLOAT DEFAULT '0' COMMENT '我的评分',
`project_imgs` TEXT COMMENT '作品图片,1-10张,中间用英文","分隔',
`project_recommend` VARCHAR(100) DEFAULT NULL COMMENT '推荐介绍',
`project_check_advice` VARCHAR(100) DEFAULT NULL COMMENT '作品初审意见',
`check_user_id` VARCHAR(34) DEFAULT NULL COMMENT '作品初审用户编号',
`my_user_id` VARCHAR(34) DEFAULT NULL COMMENT '评分人用户编号',
`grade_id` VARCHAR(34) DEFAULT NULL COMMENT '用户班级编号',
`grade_name` VARCHAR(34) DEFAULT NULL COMMENT '用户班级编号',
`class_name` VARCHAR(34) DEFAULT NULL COMMENT '用户班级编号',
`user_name` VARCHAR(34) DEFAULT NULL COMMENT '用户名称');
TRUNCATE TABLE temp_project;
#...打开游标
OPEN cur_project;
#...取游标数据
FETCH cur_project INTO cur_id,cur_project_num,cur_project_type_id,cur_project_name,cur_create_time,cur_tickets,cur_score,cur_project_imgs,cur_project_recommend,cur_project_check_advice,cur_my_score,cur_check_user_id,cur_my_user_id,cur_grade_id,cur_user_name,cur_project_type_name,cur_grade_name,cur_class_name;
WHILE done<>1 DO
INSERT INTO temp_project(id,project_num,project_type_id,project_name,create_time,tickets,score,project_imgs,project_recommend,project_check_advice,my_score,check_user_id,my_user_id,grade_id,user_name,project_type_name,grade_name,class_name)
 

  VALUES (cur_id,cur_project_num,cur_project_type_id,cur_project_name,cur_create_time,cur_tickets,cur_score,cur_project_imgs,cur_project_recommend,cur_project_check_advice,cur_my_score,cur_check_user_id,cur_my_user_id,cur_grade_id,cur_user_name,cur_project_type_name,cur_grade_name,cur_class_name);
FETCH cur_project INTO cur_id,cur_project_num,cur_project_type_id,cur_project_name,cur_create_time,cur_tickets,cur_score,cur_project_imgs,cur_project_recommend,cur_project_check_advice,cur_my_score,cur_check_user_id,cur_my_user_id,cur_grade_id,cur_user_name,cur_project_type_name,cur_grade_name,cur_class_name;
END WHILE;

  #...关闭游标

  CLOSE cur_project;

  #...查询符合条件的记录
SET calsql = "SELECT * FROM temp_project pro WHERE 1=1";
SET calsqlcount = "SELECT COUNT(*) AS 'RecordCount' FROM temp_project pro WHERE 1=1";
IF in_search_value  <> '' THEN
SET calsql = CONCAT(calsql," ","AND (pro.project_name LIKE ","'%",in_search_value,"%'"," OR"," ","pro.user_name LIKE ","'%",in_search_value,"%')");
SET calsqlcount = CONCAT(calsqlcount," ","AND (pro.project_name LIKE ","'%",in_search_value,"%'"," OR"," ","pro.user_name LIKE ","'%",in_search_value,"%')");

  END IF;
IF in_project_type_id <> '' THEN
SET calsql = CONCAT(calsql," ","AND pro.project_type_id = ","'",in_project_type_id,"'");
SET calsqlcount = CONCAT(calsqlcount," ","AND pro.project_type_id = ","'",in_project_type_id,"'");

  END IF;
IF in_grade_id <> '' THEN
SET calsql = CONCAT(calsql," ","AND pro.grade_id  = ","'",in_grade_id ,"'");
SET calsqlcount = CONCAT(calsqlcount,"
a3f7
","AND pro.grade_id  = ","'",in_grade_id ,"'");

  END IF;
IF in_score_status = '0' THEN
SET calsql = CONCAT(calsql," ","AND pro.my_score = '-1' ");
SET calsqlcount = CONCAT(calsqlcount," ","AND pro.my_score = '-1' ");

  END IF;
IF in_score_status = '1' THEN
SET calsql = CONCAT(calsql," ","AND pro.my_score <> '-1' ");
SET calsqlcount = CONCAT(calsqlcount," ","AND pro.my_score <> '-1' ");

  END IF;
SET calsql = CONCAT(calsql," ","ORDER BY pro.create_time ",in_order_by);
SET calsql = CONCAT(calsql," ","LIMIT ",in_pagenum,",",in_pagesize);
SET @sql=calsql;
PREPARE stmt FROM @sql;  

  EXECUTE stmt;  

  DEALLOCATE PREPARE stmt;
SET @sqlcount=calsqlcount;
PREPARE stmtcount FROM @sqlcount;  

  EXECUTE stmtcount;  

  DEALLOCATE PREPARE stmtcount;

 END
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  存储过程 sql 数据库