`

mysql存储过程 嵌套查询

 
阅读更多
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 ;
  
分享到:
评论

相关推荐

    mysql存储过程双层嵌套

    loop 游标双层嵌套循环 创建临时表, 游标

    MySQL数据库:存储过程嵌套.pptx

    存储过程嵌套 课程目标 1)理解 ——存储过程嵌套的概念; 2)掌握 —— 存储过程嵌套的使用; 存储过程嵌套 【例】 创建一个存储过程sell_insert(),作用是向Sell表中插入一行数据。创建另外一个存储过程sell_...

    mysql 存储过程嵌套循环demo

    mysql存储过程,REPEAT+while 实现嵌套循环。循环内嵌套循环。

    Mysql存储过程循环内嵌套使用游标示例代码

    本节主要介绍了Mysql存储过程循环内如何嵌套使用游标,详细实现如下,需要的朋友不要错过

    MySQL存储过程例子(包含事务,输出参数,嵌套调用)

    MySQL存储过程例子,包含事务,输出参数,嵌套调用,学习mysql存储过程的朋友可以参考下。

    mysql游标嵌套[文].pdf

    该存储过程使用游标嵌套来实现数据初始化。 在存储过程中,我们首先定义了多个变量,用于存储用户信息和参数信息。然后,我们使用 WHILE 循环来插入用户数据和参数数据。每次循环,我们使用游标嵌套来插入用户参数...

    PHP+SQL 嵌套查询

    PHP 结合 MySQL 进行嵌套查询(也称为子查询)的例子可以是这样的: 假设我们有两个表,一个是 students 表,另一个是 courses 表。students 表存储学生的姓名和学号,courses 表存储课程名称和课程编号。现在,...

    mysql 存储过程输入输出参数示例

    drop PROCEDURE if exists my_procedure; create PROCEDURE my_procedure(in my_id int,out my_name... 您可能感兴趣的文章:Mysql存储过程循环内嵌套使用游标示例代码MySQL 存储过程中执行动态SQL语句的方法Mysql存储过

    mysql存储过程 游标 循环使用介绍

    今天分享下自己对于Mysql存储过程的认识与了解,这里主要说说大家常用的游标加循环的嵌套使用

    devenzhou#notes#mysql存储过程1

    声明语句结束符​ 默认的语句结束符为;,在存储过程中更改结束符时,尽量在结束时修改回来。开始、结束符​ 多个结束符之间可以嵌套,开始符和结束符前面可以加标签,如

    mysql 多个游标依次执行

    mysql存储过程 多个游标循环(依次执行,非嵌套循环)REPEAT循环。有需要的可自行下载。

    MySQL案例练习.rar

    Mysql入门学习笔记,包含简单查询、常用函数、分组查询、多表查询、(嵌套)子查询、分页查询、联合查询、表中数据的增删改(DML)、表和库的增删改(DDL)、数据类型、常见约束、标识列、事务(TCL)与视图、变量、存储过程...

    MySql 5.1 参考手册.chm

    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重复数据的相关操作(包含表不存在主键的情况);...十六、MYSQL存储过程

    MySQL 5.1中文手冊

    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 5.1参考手册

    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 5.1官方简体中文参考手册

    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语句的速度 ...

Global site tag (gtag.js) - Google Analytics