MySQL通过视图(或临时表)实现动态SQL(游标)
>参考de优秀文章
Dynamic cursor in stored procedure
MySQL通过视图(或临时表)实现动态SQL(游标)。
因在实现中,需要通过DDL语句创建视图(或临时表)、删除视图(或临时表),故,只适合在一些一次性的脚本中使用,比如调试一些数据问题、做一些简单的数据初始化。
不适合使用在涉及业务操作的程序中。
>使用view实现
drop procedure if exists p_simulate_dynamic_cursor; create procedure p_simulate_dynamic_cursor()
begin
declare v_sql varchar(4000);
declare v_field varchar(4000);
declare v_result varchar(4000) default '';
declare cur_temp cursor for select v.* from view_temp_20150701 v;
declare continue handler for not found set v_field = null; set v_sql = 'create view view_temp_20150701 as select t.id from t_user t'; set @v_sql = v_sql;
prepare statement from @v_sql;
execute statement;
deallocate prepare statement; open cur_temp;
fetch cur_temp into v_field;
while (v_field is not null) do
set v_result = concat(v_result, v_field, ',');
fetch cur_temp into v_field;
end while;
close cur_temp;
select v_result; drop view if exists view_temp_20150701;
end; call p_simulate_dynamic_cursor();
>使用temporary table实现
drop procedure if exists p_simulate_dynamic_cursor_by_temp_table; create procedure p_simulate_dynamic_cursor_by_temp_table()
begin
declare v_sql varchar(4000);
declare v_field varchar(4000);
declare v_result varchar(4000) default '';
declare cur_temp cursor for select t.* from t_temp_20150701 t;
declare continue handler for not found set v_field = null; set v_sql = 'create temporary table t_temp_20150701 as select t.id from t_user t limit 0, 100'; set @v_sql = v_sql;
prepare statement from @v_sql;
execute statement;
deallocate prepare statement; open cur_temp;
fetch cur_temp into v_field;
while (v_field is not null) do
set v_result = concat(v_result, v_field, ',');
fetch cur_temp into v_field;
end while;
close cur_temp;
select v_result; drop temporary table if exists t_temp_20150701;
end; call p_simulate_dynamic_cursor_by_temp_table();
MySQL通过视图(或临时表)实现动态SQL(游标)的更多相关文章
- 动态sql
目录 1.给动态语句传值(USING 子句) 2.从动态语句检索值(INTO子句) 3.动态调用存过 4.将返回值传递到PL/SQL记录类型;同样也可用%rowtype变量 5.传递并检索值.INTO ...
- proc程序中使用PLSQL、Exception 、 动态SQL(day08)
. proc中如何使用plsql 1.1 使用plsql的语法 exec sql execute begin /* 相当于plsql的匿名块 */ end; end-exec; 在预编译时,需要加如下 ...
- mysql视图和临时表的区别
视图 视图是由从数据库的基本表中选出来的数据组成的逻辑窗口,它与基本表不同的是,视图是一个虚表.数据库中只存放视图的定义,而不存放视图包含的数据,这些数据仍存放在原来的基表中.所以基表中的数据如果发生 ...
- Mysql学习---视图/触发器/存储过程/函数/执行计划/sql优化 180101
视图 视图: 视图是一个虚拟表(非真实存在),动态获取数据,仅仅能做查询操作 本质:[根据SQL语句获取动态的数据集,并为其命名],用户使用时只需使用[名称]即可获取结果集,并可以将其当作表来使用.由 ...
- 使用动态SQL处理table_name作为输入参数的存储过程(MySQL)
关于mysql如何创建和使用存储过程,参考笔记<MySQL存储过程和函数创建>以及官网:https://dev.mysql.com/doc/refman/5.7/en/create-pro ...
- Mysql - 游标/动态sql/事务
游标这个在我目前的项目里面用的还不多, 但是其功能还是很强大的. 动态sql以前都没用过, 是跟着富士康(不是张全蛋的富土康哦)过来的同事学的. 还是挺好用的. 我的数据库方面, 跟他学了不少. 在此 ...
- MySQL存储过程动态SQL语句的生成
用Mysql存储过程来完成动态SQL语句,使用存储过程有很好的执行效率: 现在有要求如下:根据输入的年份.国家.节假日类型查询一个节假日,我们可以使用一般的SQL语句嵌入到Java代码中,但是执行效率 ...
- Mysql动态sql语句,用当前时间做表名
在mysql备份操作中, 我们可能要使用表名和当前时间来做为备份表的名称,但是MySQL在存储过程中不支持使用变量名来做表名或者列名. 例如:有一个表"user",我需要备份一份, ...
- ORACLE数据库之PL/SQL触发器、rownum、动态SQL、数据库之视图与索引
WHEN子句说明触发约束条件.Condition为一个逻辑表达时,其中必须包含相关名称,而不能包含查询语句,也不能调用PL/SQL函数.WHEN子句指定的触发约束条件只能用在BEFORE和AFTER行 ...
随机推荐
- Edge/Chrome/火狐/Safari/Opera和IE
据DigitalTrends网站报道,谷歌Chrome浏览器性能远超竞争对手的时代已经成为过去.目前流行的浏览器水平基本相当.IE 11被Windows 10中的Edge浏览器取而代之.Mozilla ...
- 实战c++中的vector系列--将迭代器转换为索引
stl的迭代器非常方便 用于各种算法. 可是一想到vector.我们总是把他当做数组,总喜欢使用下标索引,而不是迭代器. 这里有个问题就是怎样把迭代器转换为索引: #include <vecto ...
- Android进程注入
全部代码在这里下载:http://download.csdn.net/detail/a345017062/8133239 里面有两个exe.inj是一个C层进程注入的样例.inj_dalvik是我写的 ...
- 参数关键点和return返回多个(伪多个)值问题
# -*- coding: cp936 -*- #python 27 #xiaodeng #参数关键点和return返回多个(伪多个)值问题 #传递参数的概念: #即:对象作为输入,发送给函数的方式 ...
- 配置的好的Apache和PHP语言的环境下,如何在Apache目录下htdocs/html目录下 同时部署两个项目呢
建虚拟目录打开Apache->conf->httpd.conf在最下面粘贴NameVirtualHost 127.0.0.1 <VirtualHost 127.0.0.1> S ...
- echo “新密码”|passwd --stdin 用户名
--stdin This option is used to indicate that passwd should read the new password from standard input ...
- jquery json ajax三级联动
province_city_area.jsp <%@ page language="java" pageEncoding="UTF-8"%> < ...
- 【LeetCode】127. Word Ladder
Word Ladder Given two words (start and end), and a dictionary, find the length of shortest transform ...
- eclipse代码格式化设置
http://www.cnblogs.com/zhxiaomiao/archive/2010/06/19/1760995.html java---code style ---formatter 首先新 ...
- 数组插件----linq.js
优点 1.支持jQuery插件的方式.jquery.linq.min.js. 2.也可以像普通js方法一样使用.linq.min.js. 3.当然用习惯VS的童鞋肯定希望有个良好的智能感知,是的,它支 ...