-
2022-01-30 19:25:21
drop procedure if exists proc_importing_data; delimiter // create procedure proc_importing_data(IN t VARCHAR(80)) begin DECLARE v_limits INTEGER DEFAULT 100; DECLARE v_table_name VARCHAR(200); DECLARE v_last_id INTEGER DEFAULT 0; DECLARE v_id INTEGER DEFAULT 0; DECLARE v_procedure_name VARCHAR(200); DECLARE lastid integer DEFAULT 0; DECLARE no_more_record integer DEFAULT 0; declare v_sql varchar(500); DECLARE cur_record CURSOR FOR SELECT id,limits,to_table_name,last_id,procedure_func FROM export_data_fun where procedure_func =t and lock_status=0 limit 1; DECLARE CONTINUE HANDLER FOR NOT FOUND SET no_more_record = 1; OPEN cur_record; IF no_more_record = 0 THEN -- 提取游标里的数据 FETCH cur_record INTO v_id,v_limits,v_table_name,v_last_id,v_procedure_name; if v_procedure_name=t THEN -- select v_id,v_limits,v_table_name,v_last_id; -- 记录日志 UPDATE export_data_fun set lock_status=1 where id=v_id; INSERT into export_run_log(table_name,start_id,create_time,export_data_fun_id)VALUES(v_table_name,v_last_id,now(),v_id); set lastid=LAST_INSERT_ID(); set @vv_last_id=v_last_id; set @vv_limits=v_limits; set @v_sql=concat(" call ",v_procedure_name,"(?,?);"); PREPARE stmt FROM @v_sql; EXECUTE stmt USING @vv_limits,@vv_last_id; -- 执行SQL语句 deallocate prepare stmt; -- 释放掉预处理段 -- 更新同步点 UPDATE export_data_fun set lock_status=0,last_id=@vv_last_id where id=v_id; -- 记录执行时间 UPDATE export_run_log set last_id=@vv_last_id,end_time=NOW() where id=lastid; END IF; ELSE select "no data or table lock"; END IF; end // delimiter ;
这个存储过程实际上是通过调用其他存储过程来工作的,迁移数据的时候使用,
具体迁移数据的步骤如下:
- 插入迁移表中要迁移表的数据, 起始点,每次同步的数据量、 迁移存储过程名
- 编写迁移数据的存储过程
- 添加 crontab 定期执行 (控制多长时间执行一次迁移,迁移表中limits定义每次迁移多少条数据 )
更多相关内容 -
MySQL 存储过程中执行动态SQL语句的方法
2020-12-15 07:57:46drop PROCEDURE if exists my_procedure; create PROCEDURE my_procedure() BEGIN declare my_sqll varchar(500);... 您可能感兴趣的文章:mysql 存储过程中变量的定义与赋值操作mysql存储过程详解mysq -
MySQL存储过程中实现执行动态SQL语句的方法
2020-09-10 08:18:46主要介绍了MySQL存储过程中实现执行动态SQL语句的方法,实例分析了MySQL中构造及执行动态SQL语句的相关技巧,具有一定参考借鉴价值,需要的朋友可以参考下 -
mysql存储过程 在动态SQL内获取返回值的方法详解
2021-01-19 22:18:55MySql通用分页存储过程过程参数 代码如下:p_cloumns varchar(500),p_tables varchar(100),p_where varchar(4000),p_order varchar(100),p_pageindex int,p_pagesize int,out p_recordcount int,out p_pagecount int... -
MySQL 存储过程执行动态拼接SQL
2019-08-17 23:51:121.该注意的点都在存储过程代码中已经说明 DROP PROCEDURE IF EXISTS init_test_transfer_data; CREATE PROCEDURE init_test_transfer_data() BEGIN DECLARE v_i INT DEFAULT 1; DECLARE v_limit INT DEFAULT ...1.该注意的点都在存储过程代码中已经说明
DROP PROCEDURE IF EXISTS init_test_transfer_data; CREATE PROCEDURE init_test_transfer_data() BEGIN DECLARE v_i INT DEFAULT 1; DECLARE v_limit INT DEFAULT 100000; # 对于这张表的体量 500 条提交一次时性能相对较好 # 空表插入两千万数据平均八分钟左右完成,前提是删除下面提到的那行代码 # 测试服务器(自个儿平时玩玩):Aliyun Centos7 、 1核1G 、 # 数据库:自建MySQL_5.7 DECLARE v_commit INT DEFAULT 500; DECLARE v_to_commit BOOLEAN DEFAULT FALSE; DECLARE v_table_column TEXT DEFAULT 'INSERT INTO test_transfer (user_name, gender, age, create_time) VALUES'; DECLARE v_gender CHAR; DECLARE v_age INT; # 存储sql内容的变量必须是全局变量,使用 @ 符修饰 SET @sql = v_table_column; WHILE v_i <= v_limit DO IF v_i % 2 = 0 THEN SET v_gender = '1'; ELSE SET v_gender = '2'; END IF; SET v_age = v_i % 100; SET @sql = concat(@sql, '(concat(''user_name_'',', v_i, ')', ', ', v_gender, ', ', v_age, ', NOW())'); # 是否提交执行 SET v_to_commit = v_i % v_commit = 0 OR v_i = v_limit; IF v_to_commit = 0 THEN SET @sql = concat(@sql, ','); END IF; IF v_to_commit = 1 THEN SET @sql = concat(@sql, ';'); SELECT v_i; SELECT @sql; # 调试阶段可写,否则会极大的影响性能 PREPARE stmt FROM @sql; EXECUTE stmt; DEALLOCATE PREPARE stmt; SET @sql = v_table_column; END IF; SET v_i = v_i + 1; END WHILE; END;
2.测试结果
-
mysql 存储过程动态拼接sql并执行赋值
2021-01-19 04:09:17MySQL存储过程动态SQL语句的生成 用Mysql存储过程来完成动态SQL语句,使用存储过程有很好的执行效率: 现在有要求如下:根据输入的年份.国家.节假日类型查询一个节假日,我们可以使用一般的SQL语句嵌入到Java代码中,...CREATE DEFINER = CURRENT_USER PROCEDURE `NewProc`(in _xnb varchar(50))
BEGIN
## 定义变量
DECLARE _num FLOAT(14,6) DEFAULT 0;
## @表示全局变量 相当于php $
## 拼接赋值 INTO 必须要用全局变量不然语句会报错
SET @strsql = CONCAT('SELECT SUM(',_xnb,') INTO @tnum FROM btc_user_coin');
## 预处理需要执行的动态SQL,其中stmt是一个变量
PREPARE stmt FROM @strsql;
## 执行SQL语句
EXECUTE stmt;
## 释放掉预处理段
deallocate prepare stmt;
## 赋值给定义的变量
SET _num = @tnum;
SELECT _num
END;;
如果是where 查询 的话,直接就写 不用拼接sql
SELECT SUM(fee) INTO _trade_fee_buy FROM btc_myzr WHERE `coinname`=_xnb AND addtime BETWEEN _beg AND _bend;
在mysql存储过程中拼接sql解决in的字段类型不匹配问题
一个朋友问我一个问题,他写了一个存储过程,并在存储过程调用了另外一个自定义的函数.该函数返回类型如'1,34,56'的字符串,并将该字符串作为存储过程的select的id条件. begin DECLA ...
mysql 存储过程动态执行sql语句
之前经常在程序中拼接sql语句,其实我们也可以在存储过程中拼接sql 语句,动态的执行~~ 代码如下: DROP PROCEDURE IF EXISTS SearchByDoctor;CREATE P ...
java动态拼接sql语句并且执行时给sql语句的参数赋值
问题 在这里举一个例子,比如我要做一个多条件模糊查询,用户输入的时候有可能输入一个条件,也有可能输入两个条件,这时执行查询的sql语句就不确定了,但可以用动态拼接sql语句来解决这个问题. 解决方法 ...
动态拼接 sql的时候 里面 如果有变量的话 按上面的方式进行处理
set @Sql_Sql = N' select top 1 @m_zw=zw,@m_zh=temp from ket where zd=''ddd'' ' print @Sql_Sql EXEC s ...
MySQL存储过程动态SQL语句的生成
用Mysql存储过程来完成动态SQL语句,使用存储过程有很好的执行效率: 现在有要求如下:根据输入的年份.国家.节假日类型查询一个节假日,我们可以使用一般的SQL语句嵌入到Java代码中,但是执行效率 ...
Java 使用Query动态拼接SQl
之前有做个一个自定义报表的查询,这里使用的是一个动态的sql拼接,是前端选择了什么指标就查询什么信息!(这里的指标是多个表的字段,前端随便选择了这些指标,然后后端根据这些指标拼接sql,返回这些指标的 ...
存储过程中拼接SQL语句
很多时候我们需要利用参数在存储过程中重新组织SQL语句,在存储过程中拼接的SQL语句只是一个字符串,不会被直接执行,所以加一个execute执行它就可以了.具体看如下演示代码: 代码: set ANS ...
MSSQL存储过程实现拼接sql的注意点
这里我昨天碰到的问题就是执行一段根据变量tableName对不同的表进行字段状态的更改.由于服务器原因,我不能直接在数据访问层写SQL,所以只好抽离出来放到存储过程里面. 这里就出现了一个问题,我花费 ...
【原创】3. MYSQL++ Query类型与SQL语句执行过程(非template与SSQLS版本)
我们可以通过使用mysqlpp:: Query来进行SQL语句的增删改查. 首先来看一下mysqlpp::Query的一些最简单的调用, conn.connect(mysqlpp::examples: ...
随机推荐
JS实战 &#183; 复选框全选操作
思路: 1.获取被选中checkbox,通过checked属性的状态完成: 2.获取被选中的checkbox的value值: 3.求所有value的和sum: 4.定义span区域存储和sum: ...
github的使用(概要版)
Github的世界 什么是github Github除提供Git仓库托管服务外,还为开发者或团队提供了一系列功能,帮助其高效率,高品质地进行代码编写. 使用github带来哪些变化 写作形式的变化 在 ...
【cs229-Lecture20】策略搜索
本节内容: 1.POMDP: 2.Policy search算法:reinforced和Pegasus: 马尔科夫决策过程(Partially Observable Markov Decision P ...
request 获取各种路径
从request获取各种路径总结 request.getRealPath("url"); // 虚拟目录映射为实际目录 request.getRealPath("./&q ...
使用socket实现信用卡程序和迷你购物商城
#-*- coding:utf-8 -*- from moudle import * import socketserver import json import os import time imp ...
java设计模式--行为型模式--命令模式
命令模式 概述 将一个请求封装为一个对象,从而使你可用不同的请求对客户进行参数化:对请求排队或记录请求日志,以及支持可撤消的操作. 适用性 .抽象出待执行的动作以参数化某对象. .在不同的时刻指定.排 ...
【转】Docker —— 从入门到实践
http://yeasy.gitbooks.io/docker_practice/content/index.html Docker 是一个开源项目,诞生于 2013 年初,最初是 dotCloud ...
linux中sed命令的使用
sed命令是linux或者shell编程中常用的筛选.替换命令,如果能熟练使用sed则对经常使用的人来说在工作上是非常有帮助的 下面把sed主要的用法列出来(有错误的地方大家可以指正): p命令只打印 ...
screen 命令安装使用
初次接触Linux的朋友总会有个感觉:Windows平台想同时运行多个操作,执行多个程序或命令只需要打开程序即可:但在Linux中,命令行就一个,要想同时执行多个命令如何操作? 其实,只需要一个简简单 ...
Linux内核分析——第六周学习笔记20135308
第六周 进程的描述和进程的创建 一.进程描述符task_struct数据结构 1.操作系统三大功能 进程管理 内存管理 文件系统 2.进程控制块PCB——task_struct 也叫进程描述符,为了管 ...
-
MYSQL存储过程—执行字符串拼成的sql语句
2021-01-12 20:38:26存储过程中经常使用字符串拼接SQL语句,示例代码如下: SET @selectSql = 'SELECT RECID, FCODE, FNAME, FDISCOUNT, FIMAGE, FVIDEO, FTYPE, FSORT, FISHOT, FPHONE, FCONTACT, FADDR, FADMINMAPNM, FLNG, FLAT, ...MySQL存储过程中动态SQL是使用字符串拼接SQL语句,示例代码如下:
SET @selectSql = 'SELECT RECID, FCODE, FNAME, FDISCOUNT, FIMAGE, FVIDEO, FTYPE, FSORT, FISHOT FROM tsvbase '; IF(paintName<>'')THEN SET @selectSql =CONCAT(@selectSql,' where FNAME like ',"'%",paintName,"%'"); IF(regionCode<>'')THEN SET @selectSql =CONCAT(@selectSql,' and FADMINMAPNM like', "'%",fGetRegionCode(regionCode),"%'"); END IF; ELSE IF (regionCode<>'')THEN SET @selectSql =CONCAT(@selectSql,' where FADMINMAPNM like', "'%",fGetRegionCode(regionCode),"%'"); END IF; END IF; SET @selectSql =CONCAT(@selectSql,' order by FISHOT,FSORT LIMIT ',CAST(m AS CHAR(10)),',',CAST(currPage AS CHAR(10))); SELECT @selectSql; PREPARE stmt FROM @selectSql; EXECUTE stmt ; DEALLOCATE PREPARE stmt;
执行步骤如下:
- 字符串@selectSql赋值;
- 根据条件使用concat拼接字符串;
- 如果需要拼接orderby和分页字符串;
- 使用PREPARE 完成SQL预处理;
- 执行SQL
- 释放资源
-
mysql循环执行sql(存储过程)
2020-12-30 10:30:37-- 删除存储过程 DROP PROCEDURE IF EXISTS proc_initData; -- 1、创建 CREATE PROCEDURE proc_initData() BEGIN DECLARE i INT DEFAULT 0; WHILE i<=1000 DO yourSql; SET i = i+1; END WHILE; END -- 2、... -
MySQL - 存储过程动态执行 sql
2021-01-19 06:23:39存储过程动态执行 sql--存储过程名和参数,参数中in表示传入参数,out标示传出参数,inout表示传入传出参数create procedure p_procedurecode(in sumdate varchar(10))begindeclare v_sql varchar(500); --需要执行... -
mysql存储过程动态sql
2021-04-11 13:08:27mysql存储过程中,变量直接拼接在执行sql上会把变量解析成 '变量执行',比如: DECLARE v_conditionVARCHAR(4) DEFAULT 'id=1'; select * from t wherev_condition 此时不会报错,实际执行的sql是select * from t... -
MYSQL存储过程执行用字符串拼成的sql语句
2021-01-19 11:17:13执行的sql必须定义为 @sql 才能执行 否则报错DROP PROCEDURE IF EXISTS test_prepareStam;delimiter //CREATE PROCEDURE test_prepareStam(in id int)BEGINTRUNCATE TABLE test_table;/*-- 直接拼sql 然后prepare ... -
Mysql 存储过程执行过程中出错如何使其继续
2021-01-19 13:19:20今天有同事问了句MySql存储过程如何在出错后让其继续执行,网上找了一种方法,给他用了,问题解决了,现记录如下:在这里我们不深究它用来定义参数的小细节我们主要来研究DECLARE Condition 和 DECLARE ... -
mysql存储过程原理与使用方法详解
2020-12-15 01:46:02本文实例讲述了mysql存储过程原理与使用方法。分享给大家供大家参考,具体如下: 存储过程包含了一系列可执行的sql语句,存储过程存放于MySQL中,通过调用它的名字可以执行其内部的一堆sql 存储过程的优点 #1. 用于... -
MySQL 存储过程执行结果与非存储过程执行的结果不一样
2018-11-07 12:02:11代码:存储过程中 set id_pds =(select count(user_id) from sys_user_role where user_id=user_id_bl and role_id=bl_juese); select CONCAT(id_pds,'|',user_id_bl,'|',bl_juese); 结果: 代码:外部... -
mysql存储过程中使用动态SQL
2020-10-08 20:03:56mysql存储过程可以使用预编译语句的方式来使用动态SQL,主要就是将SQL字符串预编译为statement,然后执行次语句: SET @sql = sql PREPARE stmt_name FROM @sql; EXECUTE stmt_name; {DEALLOCATE | DROP} ... -
mysql存储过程实现动态sql
2020-10-15 13:45:22mysql存储过程可以使用预编译语句的方式来使用动态SQL,主要就是将SQL字符串预编译为statement,然后执行次语句: SET @sql = sql PREPARE stmt_name FROM @sql; EXECUTE stmt_name; {... -
MySQL存储过程如何操作
2021-03-04 00:08:16mysql在5.1之后增加了存储过程的功能, 存储过程运行在mysql内部,语句都已经编译好了,速度比sql更快.... 看了如下存储过程实例,你会发现mysql存储过程和shell很像.下面存储过程内容为:调用存储过... -
mysql 执行存储过程
2022-03-29 21:19:44存储过程是为了完成特定功能的SQL语句集,经编译创建并保存在数据库中,用户可通过指定存储过程的名字并给定参数(需要时)来调用执行。 存储过程思想上很简单,就是数据库 SQL 语言层面的代码封装与重用。 通俗来讲:... -
sqlserver里存储过程怎么调用存储过程
2021-01-19 21:41:07展开全部1、打开SQL server management studio,连接到数据库,展开想要创建的数据库,找到【可编程性】->【存储过程62616964757a...【存储过程】,就可以开始创建存储过程了。3、当点击了第二步的【存储... -
MYSQL定时执行存储过程
2021-03-04 00:08:37实战mysql存储程序与定时器 存储过程定时器eventprocedure实战 需求:一个庞大的日志表,现每天做定时统计一天的总数,放另一个表中,方便查看,运营。 旧方案:用脚本写好程序,用linux的crontab定时执行。 本文... -
MySQL存储过程(五)——存储过程查看、删除和修改
2021-12-22 22:43:03今天继续给大家介绍MySQL相关知识,本文主要内容是MySQL中存储过程的查看、删除和整改。 一、存储过程查看 二、存储过程修改 三、存储过程删除 -
mysql 存储过程详解
2022-07-23 21:13:30mysql 存储过程详解 -
批量执行Sql语句,MySQL存储过程Java复现
2016-10-13 18:24:02通常,我们在进行数据操作时,通过定义存储过程会带来很大的便捷,但是如果存储过程中间出现错误,并且该过程中执行sql语句众多,排查错误就会变得很困难,会花费很大的时间去查找确认错误的缘由,可以将原定义的... -
Mysql存储过程定义、输入参数、定义变量、sql语句中拼接参数、sql执行结果赋值变量等问题
2020-12-11 11:44:58总结:用concat拼接sql,执行语句执行sql 六、Mysql存储过程中查询语句执行结果赋值给变量 方式 1 DECLARE cnt INT DEFAULT 0; select count(*) into cnt from test; select cnt; 方式 2 DECLARE cnt INT DEFAULT 0... -
【MySQL存储过程】存储过程的查看与删除
2022-02-01 11:34:06查看存储过程 存储过程创建以后,用户可以通过SHOW STATUS语句来查看存储过程的状态,也可以通过SHOW CREATE语句来查看存储过程的定义。用户也可以通过查询information_schema数据库下的Routines表来查看存储过程...