`
javaPrimary
  • 浏览: 60910 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

mysql存储过程 动态SQL

阅读更多
建表语句:

CREATE TABLE `t_user_log` (

  `userID` int(11) unsigned DEFAULT NULL,

  `userName` varchar(40) DEFAULT NULL,

  `oprDate` datetime DEFAULT NULL,

  `oprContent` varchar(80) DEFAULT NULL

) ENGINE=MyISAM DEFAULT CHARSET=utf8

/*!50100 PARTITION BY RANGE (year(oprDate))

(PARTITION part0 VALUES LESS THAN (201310) ENGINE = MyISAM,

PARTITION part1 VALUES LESS THAN (201311) ENGINE = MyISAM,

PARTITION part2 VALUES LESS THAN (201312) ENGINE = MyISAM,

PARTITION part3 VALUES LESS THAN (201401) ENGINE = MyISAM,

PARTITION part4 VALUES LESS THAN (201402) ENGINE = MyISAM,

PARTITION part5 VALUES LESS THAN (201403) ENGINE = MyISAM)


存储过程语句:
-- --------------------------------------------------------------------------------
-- Routine DDL
-- Note: comments before and after the routine body will not be stored by the server
-- --------------------------------------------------------------------------------
DELIMITER $$

CREATE DEFINER=`root`@`localhost` PROCEDURE `p_batchAddUser`(in userName varchar(4000), in oprDate varchar(4000),in oprContent varchar(4000))
BEGIN
-- 定义变量
declare tmp_userName varchar(4000);
declare tmp_oprDate varchar(4000);
declare tmp_oprContent varchar(4000);
declare v_userName varchar(20);
declare v_oprDate varchar(20);
declare d_oprDate datetime;
declare v_oprContent varchar(20);
declare i_userName_num int;
declare i_oprDate_num int;
declare i_oprContent_num int;
declare v_sql varchar(6000);

set v_sql = 'insert into t_user_log(userID, userName, oprDate, oprContent) values(';
set tmp_userName = userName;
set tmp_oprDate = oprDate;
set tmp_oprContent = oprContent;

set i_userName_num = instr(tmp_userName, '|');
set i_oprDate_num = instr(tmp_oprDate, '|');
set i_oprContent_num = instr(tmp_oprContent, '|');

-- select concat(SUBSTRING(tmp_userName, 1, 5), '    ', SUBSTRING(tmp_userName, 7));

while (i_userName_num > 0 and tmp_userName is not null) do

    set v_userName = substring(tmp_userName, 1, i_userName_num - 1);
    set v_oprDate = subString(tmp_oprDate, 1, i_oprDate_num - 1);
    set v_oprContent = subString(tmp_oprContent, 1, i_oprContent_num - 1);
    set d_oprDate = str_to_date(v_oprDate, '%Y-%m-%d %H:%i:%s');
   
    set tmp_userName = substring(tmp_userName, i_userName_num + 1);
    set tmp_oprDate = substring(tmp_oprDate, i_oprDate_num + 1);
    set tmp_oprContent = substring(tmp_oprContent, i_oprContent_num + 1);
   
    set i_userName_num = instr(tmp_userName, '|');
    set i_oprDate_num = instr(tmp_oprDate, '|');
    set i_oprContent_num = instr(tmp_oprContent, '|');
   
    select concat(v_userName, '    ', d_oprDate, '    ', v_oprContent);
    SET v_sql = CONCAT(v_sql, i_userName_num, ',', '\"',v_userName,'\"', ',', '\"',d_oprDate, '\"', ',', '\"',v_oprContent,'\"', '),(');
end while;

select concat(tmp_userName, '    ', tmp_oprDate, '    ', tmp_oprContent);
SET v_sql = CONCAT(v_sql, i_userName_num, ',', '\"', tmp_userName,'\"', ',', '\"',tmp_oprDate,'\"', ',', '\"',tmp_oprContent,'\"', ');');
select concat(v_sql);

-- 执行动态语句
set @v_sql = v_sql;
prepare stmt1 from @v_sql;
execute stmt1;
deallocate prepare stmt1;

END
0
0
分享到:
评论

相关推荐

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

    MySQL存储过程是数据库中用于执行一组特定操作的预编译的SQL语句集合。它们允许开发人员封装复杂的逻辑,提高代码复用性和数据库操作效率。...理解并掌握动态SQL和返回值的处理是提升MySQL存储过程编程能力的关键步骤。

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

    以下将详细解释如何在MySQL存储过程中执行动态SQL语句。 首先,我们来看一个简单的例子: ```sql DROP PROCEDURE IF EXISTS my_procedure; CREATE PROCEDURE my_procedure() BEGIN DECLARE my_sql VARCHAR(500); ...

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

    以下是一个实例,展示了如何在MySQL存储过程中实现执行动态SQL语句的方法: 首先,我们创建一个名为`set_col_value`的存储过程,它接受四个输入参数: 1. `in_table`:表示要更新的表名。 2. `in_column`:表示要...

    mysql存储过程教程

    MySQL存储过程是数据库管理系统中的一种重要功能,它允许开发者预编译一系列SQL语句并封装成一个可重复使用的单元,从而提高数据处理的效率和代码的复用性。本教程将深入探讨MySQL存储过程的创建、调用以及相关概念...

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

    MySQL 存储过程是一种存储在 MySQL 服务器中的 SQL 代码段,它能够被多个客户端多次调用。存储过程的主要优势在于能够简化复杂的 SQL 查询,执行常见的任务,以及实现数据逻辑。通过使用存储过程,开发者可以在一次...

    mysql通用存储过程sql脚本

    mysql通用存储过程sql脚本,支持多表,子查询,高级查询 分页

    MySQL存储过程的异常处理方法

    本实例展示了如何在MySQL存储过程中实现异常处理,以捕获并处理可能出现的错误。 首先,我们注意到在创建存储过程`myProc`时,使用了`delimiter $$`来改变MySQL客户端的语句分隔符,这是为了在存储过程中使用多个...

    MySQL存储过程实战SQL脚本

    内容概述:通过MySQL存储过程实战的例子,学会使用MySQL存储过程。包含以下内容: 创建无参存储过程、有参存储过程、IF-ELSE存储过程、WHILE循环存储过程、CASE-WHEN条件控制存储过程、REPEAT UNTIL循环存储过程、...

    Java实现调用MySQL存储过程详解

    总的来说,Java通过JDBC调用MySQL存储过程涉及到连接数据库、创建`CallableStatement`、执行存储过程和处理结果。这使得开发者能够在Java应用中灵活地利用数据库提供的强大功能,实现更高效的数据处理。

    mysql存储过程动态创建多列

    本文将深入探讨如何利用MySQL存储过程动态创建多列,这是一个高级功能,尤其适用于需要根据运行时变量或条件动态修改表结构的情况。 ### MySQL存储过程动态创建多列 #### 基本概念 在MySQL中,动态地添加列到一个...

    mysql和SqlServer在存储过程上的区别.txt

    mysql和sqlserver都是数据库,但是两者之间有一些区别,那么它们在存储过程的开发上又有哪些区别呢?

    mysql经典教程+mysql存储过程讲解

    本教程结合"mysql经典教程+mysql存储过程讲解"的主题,将深入探讨MySQL的基础知识以及核心特性——存储过程。 首先,我们需要理解什么是数据库。数据库是一个组织和存储数据的系统,允许用户以结构化方式访问和管理...

    MySQL存储过程编程.pdf

    MySQL 存储过程编程 MySQL 存储过程编程是指在 MySQL 数据库中使用存储过程来实现业务逻辑的编程技术。存储过程是一种可以在数据库中存储和执行的程序单元,它可以实现复杂的业务逻辑和数据处理操作。 在 MySQL ...

    MySQL存储过程学习

    MySQL存储过程是数据库管理系统中的一种重要功能,它允许开发者预编译一系列的SQL语句,形成一个可重复使用的代码块,以提高数据处理的效率和应用程序的性能。在这个"MySQL存储过程学习"的主题中,我们将深入探讨...

    SQL2005动态表无限级分类存储过程

    总的来说,这些存储过程的核心是通过动态生成SQL语句来处理无限级分类的增删改查操作,它们利用了SQL Server 2005的特性和功能,如递归查询、事务管理等,确保了在复杂的数据结构中的数据完整性和一致性。...

    mysql存储过程之返回多个值的方法示例

    本文实例讲述了mysql存储过程之返回多个值的方法。分享给大家供大家参考,具体如下: mysql存储函数只返回一个值。要开发返回多个值的存储过程,需要使用带有INOUT或OUT参数的存储过程。咱们先来看一个orders表它的...

    MySQL 存储过程入门到精通

    MySQL存储过程是数据库管理系统中的一个重要特性,它允许程序员或数据库管理员预先定义一组SQL语句,形成一个可重用的逻辑单元。在这个“MySQL存储过程入门到精通”资料中,你将深入理解存储过程的原理、创建、调用...

    Mysql、SqlServer、SysBase存储过程自动生成工具

    0、完全支持Mysql、SqlServer、SysBase等数据库自动生成存储过程 1、 基本完全代替编写存储过程的工作任务。 2、 让不会写存储过程的测试人员,也可顺利完成加压测试工作。 3、 让会写存储过程的测试人员,短时间内...

    MySql.rar_MYSQL_mysql example sql_mysql 存储过程_存储过程

    MySQL是一个广泛使用的开源关系型数据库管理系统,以其高效、...本资料包中的"www.pudn.com.txt"可能包含了更多关于MySQL存储过程的详细信息和示例,而"MySql"可能是一个包含示例数据库的文件,供学习者实践和探索。

Global site tag (gtag.js) - Google Analytics