精华内容
下载资源
问答
  • mysql存储过程执行sql
    千次阅读
    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 ;

    这个存储过程实际上是通过调用其他存储过程来工作的,迁移数据的时候使用,

    具体迁移数据的步骤如下:

    1. 插入迁移表中要迁移表的数据, 起始点,每次同步的数据量、 迁移存储过程名
    2. 编写迁移数据的存储过程
    3. 添加 crontab 定期执行   (控制多长时间执行一次迁移,迁移表中limits定义每次迁移多少条数据 )
    更多相关内容
  • drop PROCEDURE if exists my_procedure; create PROCEDURE my_procedure() BEGIN declare my_sqll varchar(500);... 您可能感兴趣的文章:mysql 存储过程中变量的定义与赋值操作mysql存储过程详解mysq
  • 主要介绍了MySQL存储过程中实现执行动态SQL语句的方法,实例分析了MySQL中构造及执行动态SQL语句的相关技巧,具有一定参考借鉴价值,需要的朋友可以参考下
  • MySql通用分页存储过程过程参数 代码如下: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:12
    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 ...

    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语句的生成 用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&period; MYSQL&plus;&plus; Query类型与SQL语句执行过程(非template与SSQLS版本)

    我们可以通过使用mysqlpp:: Query来进行SQL语句的增删改查. 首先来看一下mysqlpp::Query的一些最简单的调用, conn.connect(mysqlpp::examples: ...

    随机推荐

    JS实战 &&num;183&semi; 复选框全选操作

    思路: 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 也叫进程描述符,为了管 ...

    展开全文
  • 存储过程中经常使用字符串拼接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;
    

    执行步骤如下:

    1. 字符串@selectSql赋值;
    2. 根据条件使用concat拼接字符串;
    3. 如果需要拼接orderby和分页字符串;
    4. 使用PREPARE 完成SQL预处理;
    5. 执行SQL
    6. 释放资源
    展开全文
  • 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:27
    mysql存储过程中,变量直接拼接在执行sql上会把变量解析成 '变量执行',比如: DECLARE v_conditionVARCHAR(4) DEFAULT 'id=1'; select * from t wherev_condition 此时不会报错,实际执行的sql是select * from t...
  • 执行sql必须定义为 @sql 才能执行 否则报错DROP PROCEDURE IF EXISTS test_prepareStam;delimiter //CREATE PROCEDURE test_prepareStam(in id int)BEGINTRUNCATE TABLE test_table;/*-- 直接拼sql 然后prepare ...
  • 今天有同事问了句MySql存储过程如何在出错后让其继续执行,网上找了一种方法,给他用了,问题解决了,现记录如下:在这里我们不深究它用来定义参数的小细节我们主要来研究DECLARE Condition 和 DECLARE ...
  • 本文实例讲述了mysql存储过程原理与使用方法。分享给大家供大家参考,具体如下: 存储过程包含了一系列可执行sql语句,存储过程存放于MySQL中,通过调用它的名字可以执行其内部的一堆sql 存储过程的优点 #1. 用于...
  • 代码:存储过程中 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:56
    mysql存储过程可以使用预编译语句的方式来使用动态SQL,主要就是将SQL字符串预编译为statement,然后执行次语句: SET @sql = sql PREPARE stmt_name FROM @sql; EXECUTE stmt_name; {DEALLOCATE | DROP} ...
  • mysql存储过程实现动态sql

    千次阅读 2020-10-15 13:45:22
    mysql存储过程可以使用预编译语句的方式来使用动态SQL,主要就是将SQL字符串预编译为statement,然后执行次语句: SET @sql = sql PREPARE stmt_name FROM @sql; EXECUTE stmt_name; {...
  • MySQL存储过程如何操作

    千次阅读 2021-03-04 00:08:16
    mysql在5.1之后增加了存储过程的功能, 存储过程运行在mysql内部,语句都已经编译好了,速度比sql更快.... 看了如下存储过程实例,你会发现mysql存储过程和shell很像.下面存储过程内容为:调用存储过...
  • mysql 执行存储过程

    千次阅读 2022-03-29 21:19:44
    存储过程是为了完成特定功能的SQL语句集,经编译创建并保存在数据库中,用户可通过指定存储过程的名字并给定参数(需要时)来调用执行存储过程思想上很简单,就是数据库 SQL 语言层面的代码封装与重用。 通俗来讲:...
  • 展开全部1、打开SQL server management studio,连接到数据库,展开想要创建的数据库,找到【可编程性】->【存储过程62616964757a...【存储过程】,就可以开始创建存储过程了。3、当点击了第二步的【存储...
  • MYSQL定时执行存储过程

    千次阅读 2021-03-04 00:08:37
    实战mysql存储程序与定时器 存储过程定时器eventprocedure实战 需求:一个庞大的日志表,现每天做定时统计一天的总数,放另一个表中,方便查看,运营。 旧方案:用脚本写好程序,用linux的crontab定时执行。 本文...
  • 今天继续给大家介绍MySQL相关知识,本文主要内容是MySQL存储过程的查看、删除和整改。 一、存储过程查看 二、存储过程修改 三、存储过程删除
  • mysql 存储过程详解

    万次阅读 多人点赞 2022-07-23 21:13:30
    mysql 存储过程详解
  • 通常,我们在进行数据操作时,通过定义存储过程会带来很大的便捷,但是如果存储过程中间出现错误,并且该过程执行sql语句众多,排查错误就会变得很困难,会花费很大的时间去查找确认错误的缘由,可以将原定义的...
  • 总结:用concat拼接sql,执行语句执行sql 六、Mysql存储过程中查询语句执行结果赋值给变量 方式 1 DECLARE cnt INT DEFAULT 0; select count(*) into cnt from test; select cnt; 方式 2 DECLARE cnt INT DEFAULT 0...
  • 查看存储过程 存储过程创建以后,用户可以通过SHOW STATUS语句来查看存储过程的状态,也可以通过SHOW CREATE语句来查看存储过程的定义。用户也可以通过查询information_schema数据库下的Routines表来查看存储过程...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 371,036
精华内容 148,414
关键字:

mysql存储过程执行sql

mysql 订阅