`
- 浏览:
609235 次
- 性别:
- 来自:
上海
-
DELIMITER $$
CREATE PROCEDURE test_cursor(IN studyId Long)
BEGIN
-- 需要执行的SQL语句
DECLARE v_sql_1 VARCHAR(2000);
DECLARE v_sql_2 VARCHAR(2000);
/*定义变量*/
DECLARE crf_form_id Long;
DECLARE table_name VARCHAR(255);
DECLARE field_sql VARCHAR(2000);
-- 定义循环标识,默认值为 FALSE
DECLARE done INT DEFAULT FALSE;
-- 定义游标,并将sql结果集赋值到游标中
DECLARE My_Cursor CURSOR FOR (
select
c.id, c.table_name
from
study s, crf c, study_crf sc
where
s.id=sc.study_id
and c.id=sc.crf_form_id
and s.deleted=0
and c.deleted=0
and c.generate_to_db=1
and c.table_name is not null
and s.id=studyId
);
-- 将结束标志绑定到游标,若没有数据返回,程序继续,并将变量done设为TRUE
DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = TRUE;
-- 打开游标
OPEN My_Cursor;
myLoop2 : LOOP
-- 循环游标中的数据,并赋值到变量中
FETCH My_Cursor INTO crf_form_id, table_name ;
IF done THEN
LEAVE myLoop2;
ELSE
-- 动态拼接sql并赋值v_sql_1
SET v_sql_1 = CONCAT('
select
GROUP_CONCAT(cdf.field_name, " as \'", f.label, "\'") into @param1
from
crf_dict_field cdf, study_crf sc, dictionary d, field f
where cdf.crf_form_id=sc.crf_form_id
and cdf.dict_id=d.id
and cdf.field_id=f.id
and cdf.deleted=0
and d.deleted=0
and f.deleted=0
and cdf.generate_to_db=1
and cdf.field_name is not null
and cdf.crf_form_id=', crf_form_id, ' and sc.study_id=', studyId
);
-- 需要用@转换下,直接v_sql_1执行不了
SET @sql_1 = v_sql_1;
-- 预处理需要执行的动态SQL,其中stmt是一个变量
PREPARE stmt1 FROM @sql_1;
-- 执行SQL语句
EXECUTE stmt1;
-- 释放掉预处理段
DEALLOCATE PREPARE stmt1;
-- @param1赋值给maxId2
SET field_sql = @param1;
-- 动态拼接sql并赋值v_sql_2
SET v_sql_2 = CONCAT('select id, objectId, ', field_sql, ' from ', table_name, ' where deleted=0 and objectId in (select so.id from study_object so where so.deleted=0 and so.study_id=', studyId, ') ');
SET @sql_2 = v_sql_2;
-- 预处理需要执行的动态SQL,其中stmt是一个变量
PREPARE stmt2 FROM @sql_2;
-- 执行SQL语句
EXECUTE stmt2;
-- 释放掉预处理段
DEALLOCATE PREPARE stmt2;
-- 嵌套使用是内部游标结束后给done置 FALSE
SET done=FALSE;
END IF;
END LOOP myLoop2;
-- 关闭游标
CLOSE My_Cursor;
END
$$
DELIMITER ;
分享到:
Global site tag (gtag.js) - Google Analytics
相关推荐
loop 游标双层嵌套循环 创建临时表, 游标
存储过程嵌套 课程目标 1)理解 ——存储过程嵌套的概念; 2)掌握 —— 存储过程嵌套的使用; 存储过程嵌套 【例】 创建一个存储过程sell_insert(),作用是向Sell表中插入一行数据。创建另外一个存储过程sell_...
mysql存储过程,REPEAT+while 实现嵌套循环。循环内嵌套循环。
本节主要介绍了Mysql存储过程循环内如何嵌套使用游标,详细实现如下,需要的朋友不要错过
MySQL存储过程例子,包含事务,输出参数,嵌套调用,学习mysql存储过程的朋友可以参考下。
该存储过程使用游标嵌套来实现数据初始化。 在存储过程中,我们首先定义了多个变量,用于存储用户信息和参数信息。然后,我们使用 WHILE 循环来插入用户数据和参数数据。每次循环,我们使用游标嵌套来插入用户参数...
PHP 结合 MySQL 进行嵌套查询(也称为子查询)的例子可以是这样的: 假设我们有两个表,一个是 students 表,另一个是 courses 表。students 表存储学生的姓名和学号,courses 表存储课程名称和课程编号。现在,...
drop PROCEDURE if exists my_procedure; create PROCEDURE my_procedure(in my_id int,out my_name... 您可能感兴趣的文章:Mysql存储过程循环内嵌套使用游标示例代码MySQL 存储过程中执行动态SQL语句的方法Mysql存储过
今天分享下自己对于Mysql存储过程的认识与了解,这里主要说说大家常用的游标加循环的嵌套使用
声明语句结束符 默认的语句结束符为;,在存储过程中更改结束符时,尽量在结束时修改回来。开始、结束符 多个结束符之间可以嵌套,开始符和结束符前面可以加标签,如
mysql存储过程 多个游标循环(依次执行,非嵌套循环)REPEAT循环。有需要的可自行下载。
Mysql入门学习笔记,包含简单查询、常用函数、分组查询、多表查询、(嵌套)子查询、分页查询、联合查询、表中数据的增删改(DML)、表和库的增删改(DDL)、数据类型、常见约束、标识列、事务(TCL)与视图、变量、存储过程...
7.2.10. MySQL如何优化嵌套Join 7.2.11. MySQL如何简化外部联合 7.2.12. MySQL如何优化ORDER BY 7.2.13. MySQL如何优化GROUP BY 7.2.14. MySQL如何优化LIMIT 7.2.15. 如何避免表扫描 7.2.16. INSERT语句的速度 ...
一、MYSQL随机产生指定范围的字符串; 二、MYSQL随机生成两个日期之间的时间; 三、MYSQL随机生成姓名; 四、MYSQL返回表的所有字段; 五、MySQL重复数据的相关操作(包含表不存在主键的情况);...十六、MYSQL存储过程
7.2.10. MySQL如何优化嵌套Join 7.2.11. MySQL如何简化外部联合 7.2.12. MySQL如何优化ORDER BY 7.2.13. MySQL如何优化GROUP BY 7.2.14. MySQL如何优化LIMIT 7.2.15. 如何避免表扫描 7.2.16. INSERT语句的速度 ...
7.2.10. MySQL如何优化嵌套Join 7.2.11. MySQL如何简化外部联合 7.2.12. MySQL如何优化ORDER BY 7.2.13. MySQL如何优化GROUP BY 7.2.14. MySQL如何优化LIMIT 7.2.15. 如何避免表扫描 7.2.16. INSERT语句的速度 ...
7.2.10. MySQL如何优化嵌套Join 7.2.11. MySQL如何简化外部联合 7.2.12. MySQL如何优化ORDER BY 7.2.13. MySQL如何优化GROUP BY 7.2.14. MySQL如何优化LIMIT 7.2.15. 如何避免表扫描 7.2.16. INSERT语句的速度 ...