`
yanwei11911011
  • 浏览: 15863 次
  • 性别: Icon_minigender_1
  • 来自: 天津
社区版块
存档分类

写MySQL存储过程实现动态执行SQL (转)

阅读更多
--存储过程名和参数,参数中in表示传入参数,out标示传出参数,inout表示传入传出参数

create procedure p_procedurecode(in sumdate varchar(10))   
begin
     declare v_sql varchar(500);    --需要执行的SQL语句
     declare sym varchar(6);
     
     declare var1 varchar(20);
     declare var2 varchar(70);
     declare var3 integer;

     --定义游标遍历时,作为判断是否遍历完全部记录的标记
     declare no_more_departments integer DEFAULT 0;     

     --定义游标名字为C_RESULT 
     DECLARE C_RESULT CURSOR FOR
             SELECT barcode,barname,barnum FROM tmp_table;

    --声明当游标遍历完全部记录后将标志变量置成某个值
     DECLARE CONTINUE HANDLER FOR NOT FOUND
             SET no_more_departments=1;

     set sym=substring(sumdate,1,6);     --截取字符串,并将其赋值给一个遍历

     --连接字符串构成完整SQL语句,动态SQL执行后的结果记录集,在MySQL中无法获取,因此需要转变思路将其放置到一个临时表中(注意代码中的写法)。一般写法如下:

     --     'Create TEMPORARY Table   表名(Select的查询语句);
     set v_sql= concat('Create TEMPORARY Table tmp_table(select aa as aacode,bb as aaname,count(cc) as ccnum from h',sym,' where substring(dd,1,8)=''',sumdate,''' group by aa,bb)');

     set @v_sql=v_sql;   --注意很重要,将连成成的字符串赋值给一个变量(可以之前没有定义,但要以@开头)
     prepare stmt from @v_sql;  --预处理需要执行的动态SQL,其中stmt是一个变量
     EXECUTE stmt;      --执行SQL语句
     deallocate prepare stmt;     --释放掉预处理段

     OPEN C_RESULT;       --打开之前定义的游标
     REPEAT                      --循环语句的关键词
           FETCH C_RESULT INTO VAR1, VAR2, VAR3;   --取出每条记录并赋值给相关变量,注意顺序

          --执行查询语句,并将获得的值付给一个变量 @oldaacode(注意如果以@开头的变量可以不用通过declare语句事先声明)
           select @oldaacode:=vcaaCode from T_sum where vcaaCode=var1 and dtDate=sumdate; 
           if @oldaacode=var1 then    --判断
              update T_sum set iNum=var3 where vcaaCode=var1 and dtDate=sumdate;
           else
               insert into T_sum(vcaaCode,vcaaName,iNum,dtDate) values(var1,var2,var3,sumdate);
           end if;
     UNTIL no_more_departments  END REPEAT;    --循环语句结束
     CLOSE C_RESULT;                            --关闭游标

     DROP TEMPORARY TABLE tmp_table;       --删除临时表
end;
分享到:
评论

相关推荐

    MySQL 存储过程中执行动态SQL语句的方法

    drop PROCEDURE if exists my_procedure; create PROCEDURE my_procedure() BEGIN declare my_sqll varchar(500);... 您可能感兴趣的文章:mysql 存储过程中变量的定义与赋值操作mysql存储过程详解mysq

    MySQL存储过程中实现执行动态SQL语句的方法

    本文实例讲述了MySQL存储过程中实现执行动态SQL语句的方法。分享给大家供大家参考。具体实现方法如下: mysql> mysql> delimiter $$ mysql> mysql> CREATE PROCEDURE set_col_value -> (in_table VARCHAR(128), -...

    mysql存储过程 在动态SQL内获取返回值的方法详解

    本篇文章是对mysql存储过程在动态SQL内获取返回值进行了详细的分析介绍,需要的朋友参考下

    mysql 查询存储过程的 sql 语句.docx

    MySQL 查询存储过程是一种存储在 MySQL 服务器中的 SQL 代码段,可以被多个客户端 多次调用。它们被用来简化复杂的 SQL 查询,执行常见的任务,以及实现数据逻辑。通过 存储过程,我们可以在一次操作中,执行多个 ...

    MySQL存储过程完整版使用代码示例

    资源包中囊括了MySQL数据库中的存储过程的使用包含的基本结构及日常所使用到的基本函数的使用【包括java端调用存储过程,创建临时表,动态执行sql语句,过程的递归调用,指针循环取数,批量创建表删除表,树状结构的...

    mysql 查询存储过程的 sql 语句.7z

    MySQL 查询存储过程是一种存储在 MySQL 服务器中的 SQL 代码段,可以被多个客户端 多次调用。它们被用来简化复杂的 SQL 查询,执行常见的任务,以及实现数据逻辑。通过 存储过程,我们可以在一次操作中,执行多个 ...

    DBHelper数据库操作类(支持OleDb、MySQL、Oracle、SQL、SQLite).zip

    执行SQL语句,返回影响的记录数 执行MySql和Oracle滴混合事务 执行多条SQL语句,实现数据库事务。 执行带一个存储过程参数的的SQL语句。 向数据库里插入图像格式的字段 执行一条计算查询结果语句,返回查询结果 执行...

    MySQL5.0存储过程

    SQL语句需要先编译然后执行,而存储过程(Stored Procedure)是一组为了完成特定功能的SQL语句集,经编译后存储在数据库中,用户通过指定存储过程的名字并给定参数(如果该存储过程带有参数)来调用执行它。...

    MySQL存储过程综述及如何使用Navicat创建存储过程

    一、什么是MySQL存储过程?   在大型项目中,有时候需要重复执行能够完成特定功能的SQL语句集,而MySQL为我们提供了存储过程的概念,存储过程是数据库中的一个重要对象,它是存储在数据库中的一组完成特定功能的...

    SQL Server 2005 定时执行SQL语句的方法

    不过要想更加直观的控制,直接写一个程序,定时执行你的存储过程。 1、设置“SQL Server 代理”(SQL Server Agent)服务随系统启动 –我的电脑–控制面板–管理工具–服务–右键SQLSERVERAGENT–属性–启动类型–选择...

    第11章MySQL存储过程与函数.docx

    MySQL 存储过程和函数是数据库中定义的一组用户定义的 SQL 语句集合。它们之间的区别在于: 1. 存储过程实现的功能要复杂一点,而函数实现的功能针对性比较强。 2. 存储过程可以返回参数,而函数只能返回值或者表...

    mysql存储过程原理与使用方法详解

    本文实例讲述了mysql存储过程原理与使用方法。分享给大家供大家参考,具体如下: 存储过程包含了一系列可执行的sql语句,存储过程存放于MySQL中,通过调用它的名字可以执行其内部的一堆sql 存储过程的优点 #1. 用于...

    MySQL数据库:存储过程的创建1.pptx

    数据数据库编程 创建存储过程1 课程目标 1)了解 ——存储过程的优点; 2)理解 —— 存储过程...当然,当存储过程体中只有一个SQL语句时可以省略BEGIN-END标志。 创建存储过程 proc_parameter的参数如下: [ IN | OUT

    mysql创建存储过程实现往数据表中新增字段的方法分析

    主要介绍了mysql创建存储过程实现往数据表中新增字段的方法,结合实例形式对比分析了通过存储过程新增字段相关操作技巧,需要的朋友可以参考下

    sqlserver存储过程语法及实例

    SQL Server 存储过程语法及实例 SQL Server 存储过程是一种 powerful 的数据库对象,它可以封装复杂的业务逻辑,并且提供了高效、安全和灵活的方式来管理数据。存储过程可以看作是一种特殊的函数,它可以接受输入...

    实验9 存储过程的创建和使用

    阅读实验教材《SQL Server 2012数据库管理与开发》第137页到155页的内容,掌握存储过程的概念、了解存储过程的类别(系统存储过程,用户自定义存储过程,扩展存储过程);掌握存储过程的建立;掌握存储过程的两种...

    SQLPro for Mysql1.0.13.zip

    PHP中文为你提供的是Mac版 SQLPro for MySQL 1.0.13破解版免费下载,SQLPro for MySQL是一款Mac上优秀的MySQL客户端,方便和快速的连接到MySQL数据库,图形界面,支持多种主题,代码高亮,语句查询等... 存储过程执行

    insert/update同时执行(mysql,oracle,sqlserver)

    判断是否存在,存在就update,不存在insert,不是用存储过程解决的。

Global site tag (gtag.js) - Google Analytics