当前位置:首页 > Mysql技术文章 > mysql存储过程 在动态SQL内获取返回值的方法详解

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

  • 发布时间:
  • 作者:码农之家原创
  • 点击:196

这篇文章主要知识点是关于mysql、存储过程、返回值、的内容,如果大家想对相关知识点有系统深入的学习,可以参阅以下相关资源

MySQL运维内参

《MySQL运维内参:MySQL、Galera、Inception核心原理与最佳实践》是一本介绍MySQL数据库知识的专业书籍,从核心原理到最佳实践,深入浅出、抽丝剥茧地进行讲解,不仅从源码和运维两个角度介绍

查看详情

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

 $:begin
    declare v_sqlcounts varchar(4000);
    declare v_sqlselect varchar(4000);
 #拼接查询总记录的SQL语句
   set v_sqlcounts = concat('select count(*) into @recordcount from ',p_tables,p_where);
    #select v_sqlcounts;leave $;
   set @sqlcounts = v_sqlcounts;
   prepare stmt from @sqlcounts;
        execute stmt;
  deallocate prepare stmt;
   #获取动态SQL语句返回值
  set p_recordcount = @recordcount;
  #根据总记录跳数计算出总页数
   set p_pagecount = ceiling((p_recordcount+0.0)/p_pagesize);
   if p_pageindex <1 then
       set p_pageindex = 1;
     elseif p_pageindex > p_pagecount and p_pagecount <> 0 then
       set p_pageindex = p_pagecount;
   end if;
   #拼接分页查询记录的动态SQL语句
   set v_sqlselect = concat('select ',p_cloumns,' from ',p_tables,p_where,if(p_order is not null,p_order,''),' limit ',(p_pageindex-1)*p_pagesize,' , ',p_pagesize);
   #select v_sqlselect;leave $;
   set @sqlselect = v_sqlselect;
    prepare stmtselect from @sqlselect;
   execute stmtselect;
    deallocate prepare stmtselect;
   end $

 

#拼接查询总记录的SQL语句  
set v_sqlcounts = concat('select count(*) into @recordcount from ',v_tables,v_where);  
set @sqlcounts := v_sqlcounts;  
#预处理动态SQL  
prepare stmt from @sqlcounts;  
#传递动态SQL内参数  
set @s1= categoryid;  
execute stmt using @s1;  
deallocate prepare stmt;  
#获取动态SQL语句返回值  
set recordcount = @recordcount; 

#拼接查询总记录的SQL语句
set v_sqlcounts = concat('select count(*) into @recordcount from ',v_tables,v_where);
set @sqlcounts := v_sqlcounts;
#预处理动态SQL
prepare stmt from @sqlcounts;
#传递动态SQL内参数
set @s1= categoryid; execute stmt using @s1; deallocate prepare stmt;
#获取动态SQL语句返回值
set recordcount = @recordcount;
以上我上再做存储过程分页里用到动态SQL里将查询到的count记录条数通过变量@recordcount放到recordcount里面了。
mysql的IF ELSE和其他数据库的判断有点不一样,简单的判断语句如下。
 

#根据总记录跳数计算出总页数  
set pagecount = ceiling((recordcount+0.0)/pagesize);  
if pageindex <1 then 
    set pageindex = 1;  
elseif pageindex > pagecount then 
    set pageindex = pagecount;  
else 
    select pageindex,pagecount;  
end if; 

#根据总记录跳数计算出总页数 set pagecount = ceiling((recordcount+0.0)/pagesize); if pageindex <1 then set pageindex = 1; elseif pageindex > pagecount then set pageindex = pagecount; else select pageindex,pagecount; end if;

以上就是本次给大家分享的关于Mysql的全部知识点内容总结,大家还可以在下方相关文章里找到MySQL存储引擎InnoDB的配置及、 mysql中插入emoji表情失败的、 Linux/UNIX和Window平台上安装、 等mysql文章进一步学习,感谢大家的阅读和支持。

上一篇:MySQL Where 条件语句的实例用法讲解

下一篇:MYSQL因没卸载完全导致安装不成功的心得笔记

展开 +

收起 -

相关内容
PHP、MySQL与JavaScript学习手册

本书有借助面向对象的编程基础,深入学习PHP。研究MySQL,从数据库结构到复杂查询。掌握JavaScript语言,以及带有jQuery的增强功能。调用Ajax进行后台浏览器/服务器通信等,欢迎免费下载

查看详情
PHP和MySQL Web开发

在《PHP和MySQL Web开发》书中,我们将把使用PHP与MySQL的经验和心得体会毫无保留地分享给你,PHP和MySQL是目前热门的两个Web开发工具。

查看详情
MySQL技术内幕:InnoDB存储引擎

《MySQL技术内幕:InnoDB存储引擎(第2版)》 由国内资深MySQL专家亲自执笔,国内外多位数据库专家联袂推荐。作为国内唯一一本关于InnoDB的专著,《MySQL技术内幕:InnoDB存储引擎(第2版)》的第1版广受

查看详情
MySQL王者晋级之路

本书深入剖析MySQL数据库体系结构,实战演练备份恢复、主从复制,详解高可用集群架构的设计与实践过程,详细梳理优化思路,展现新版本的特性,并与真实生产案例相结合,通过核心原理到“王者”实战,全面覆盖MySQL数据库的知识点

查看详情
零点起飞学MySQL

本书是一本MySQL的入门教程,是手把手教会读者使用该数据库的入门教程。本书概念清楚,用穿插类比和图解的方式进行讲解,可以让读者更加直观地理解和掌握MySQL的各个知识点。本书附带1张光盘,收录了本书配套多媒体教学视频及涉及的源文件,便于读者高效、直观地学习。

查看详情
PHP和MySQL Web开发

《PHP和MySQL Web开发》将PHP开发与MySQL应用相结合,分别对PHP和MySQL做了深入浅出的分析,不仅介绍PHP和MySQL的一般概念,而且对PHP和MySQL的Web应用做了较全面的阐述,并包括几个经典且实用的例子

查看详情
MySQL与MariaDB学习指南

MySQL与MariaDB学习指南 使读者不仅能够深入了解MySQL这种主流数据库,还能全面掌握作为开源数据库新秀的MariaDB的使用方法。书中内容由浅至深、层层深入,从分步介绍如何安装MySQL和MariaDB,到

查看详情
PHP与MySQL高性能应用开发

PHP与MySQL高性能应用开发书中不仅讲解了OOP、设计模式,也讲解了如何进行性能优化和调试。甚至,还对于语言之外的代码重构进行了讲解,本书面向的对象是有一定PHP基础,但是又想深入学习的PHP开发者,欢迎免费下载

查看详情
PHP+MySQL动态网站开发从入门到精通

《PHP+MySQL动态网站开发从入门到精通》本书循序渐进地介绍了PHP 7 MySQL 5.7开发动态网站的主要知识和技能,提供案例、课件、命令速查手册,让你看得懂、学得会、做得出,教你快速成为网站应用开发高手。

查看详情
学习笔记
网友NO.629441

MySQL动态字符串处理DYNAMIC_STRING

MySQL中,常常会看到一些关于动态字符串的处理,列如:DYNAMIC_STRING。 为了记录动态字符串的实际长度,缓冲区的最大长度,以及每次字符串需要调整时,及时分配新的内存,以及调整长度。MySQL使用了DYNAMIC_STRING来保存动态字符串相关的信息: typedef struct st_dynamic_string{ char *str; size_t length, max_length, alloc_increment;} DYNAMIC_STRING; 在这个结构体中,str存储实际字符串的首地址,length记录字符串的实际长度,max_length记录字符串缓冲区最多可以存放多少字符,alloc_increment表示当字符串需要分配内存时,每次分配多少内存。 下面看看这个结构体的初始化过程: my_bool init_dynamic_string( DYNAMIC_STRING *str, const char *init_str, size_t init_alloc, size_t alloc_increment ){ size_t length; DBUG_ENTER( "init_dynamic_string" ); if ( !alloc_increment ) alloc_increment = 128; length = 1; if ( init_str (length = strlen( init_str ) + ……

网友NO.418677

mysql 动态执行存储过程语句

下面写一个给大家做参考啊 create procedure sp_find(pfind varchar(500) BEGIN DECLAR msql varchar(2000); SET @MyQuery=Concat('select * from 表 where ',pfind); PREPARE msql from @MyQuery; EXECUTE msql; END 注意一点的就是MYSQL中有好多已经定义好的函数可以使用,比如上面的拼接函数Concat(),利用好这些函数会有很多帮助的。 ……

网友NO.606204

MySQL动态创建表,数据分表的存储过程

BEGIN DECLARE `@i` int(11); DECLARE `@siteCount` int(11); DECLARE `@sqlstr` VARCHAR(2560); DECLARE `@sqlinsert` VARCHAR(2560); //以上声明变量 SELECT COUNT(0) into `@siteCount` FROM tbl_base_site; //计算表tbl_base_site的记录总条数 set `@i`=1; WHILE (`@i`-1)*300`@siteCount` DO //while循环执行 SET @sqlstr = CONCAT('CREATE TABLE tbl_base_syslog',`@i`,'(syslog_id INT(11) AUTO_INCREMENT PRIMARY KEY, create_user VARCHAR(32), description text, create_time datetime, site_id INT(11), ip VARCHAR(64), version_id SMALLINT(2), module_identity VARCHAR(64), right_name VARCHAR(64) )'); prepare stmt from @sqlstr; execute stmt; //以上实现动态创建表 SET @sqlinsert = CONCAT('INSERT INTO tbl_base_syslog',`@i`,'( syslog_id, create_user, description, create_time, site_id, ip, version_id, module_identity, right_name) SELECT syslog_id, create_user, description, create_time, site_id, ip, version_id, module_identity, right_name FROM tbl_base_syslog WHERE site_id IN (select tbs.site_id ……

网友NO.718220

Mysql动态更新数据库脚本的示例讲解

具体的 upgrade 脚本如下: 动态删除索引 DROP PROCEDURE IF EXISTS UPGRADE;DELIMITER $$CREATE PROCEDURE UPGRADE()BEGIN-- RESOURCE.AUDIO_ATTRIBUTE IF EXISTS(SELECT * FROM INFORMATION_SCHEMA.STATISTICS WHERE TABLE_SCHEMA = 'RESOURCE' AND TABLE_NAME = 'AUDIO_ATTRIBUTE' AND INDEX_NAME = 'resource_publish_resource_id_index') THEN ALTER TABLE `AUDIO_ATTRIBUTE` DROP INDEX resource_publish_resource_id_index; END IF;END$$DELIMITER ;CALL UPGRADE();DROP PROCEDURE IF EXISTS UPGRADE; 动态添加字段 DROP PROCEDURE IF EXISTS UPGRADE;DELIMITER $$CREATE PROCEDURE UPGRADE()BEGIN-- HOMEWORK.HOMEWORK_QUESTION_GROUP.FROM_ID IF NOT EXISTS(SELECT * FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_SCHEMA = 'HOMEWORK' AND TABLE_NAME = 'HOMEWORK_QUESTION_GROUP' AND COLUMN_NAME = 'FROM_ID') THEN ALTER TABLE `HOMEWORK_QUESTION_GROUP` ADD COLUMN FROM_ID VARCHAR(50) NULL; END IF;-- HOMEWORK.HOMEWORK_QUESTION_GROUP.QUESTION_TYPE IF NOT EXISTS(SELECT * FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_SCHEMA = 'H……

<
1
>

Copyright 2018-2020 xz577.com 码农之家

本站所有电子书资源不再提供下载地址,只分享来路

免责声明:网站所有作品均由会员网上搜集共同更新,仅供读者预览及学习交流使用,下载后请24小时内删除

版权投诉 / 书籍推广 / 赞助:QQ:520161757