0 0

mysql存储过程执行动态sql的问题5

我现在想通过mysql的存储过程执行动态SQL,传递一个表名查询,根据表名查询表中的第一个列。

根据第一列获取其列中的最大值,下面是我写的存储过程。但始终获取不到最大值的结果,请帮忙看一下 是什么原因?


DELIMITER $$
CREATE PROCEDURE genBillsNoProc(IN tableName VARCHAR(30),OUT data_t VARCHAR(100))
BEGIN
DECLARE sql_1 VARCHAR(1000);
DECLARE sql_2 VARCHAR(1000);
SET sql_1  =  CONCAT("SELECT COLUMN_NAME into @colName FROM information_schema.COLUMNS WHERE table_name='",tableName,"' limit 0,1");
SET sql_2  =  CONCAT("SELECT MAX(?) FROM ",tableName);


SET @frist_sql=sql_1;
PREPARE stmt FROM @frist_sql;
EXECUTE stmt;

SET data_t := @colName;
SET @second_sql=sql_2;
PREPARE stmt1 FROM @second_sql;
EXECUTE stmt1 USING @colName;
SELECT sql_2 ;
END$$

##执行存储过程
CALL genBillsNoProc('t_common_system',@data_t);

运行存储过程返回结果就是一个列名:
col_xxx

问题补充:呵呵,问题解决了

正确的SQL:

DELIMITER $$
CREATE PROCEDURE genBillsNoProc(IN tableName VARCHAR(30),OUT data_t VARCHAR(100))
BEGIN
DECLARE sql_1 VARCHAR(1000);
DECLARE sql_2 VARCHAR(1000);

SET sql_1  =  CONCAT("SELECT COLUMN_NAME into @colName FROM information_schema.COLUMNS WHERE table_name='",tableName,"' limit 0,1");
#执行sql_1SQL语句;
SET @frist_sql=sql_1;
PREPARE stmt FROM @frist_sql;
EXECUTE stmt;

SET sql_2 = CONCAT("select max(",@colName,") into @sql_result from ",tableName);
#执行sql_2SQL语句;
SET @second_sql=sql_2;
PREPARE stmt1 FROM @second_sql;
EXECUTE stmt1;

#设置返回结果;
SET data_t := @sql_result;
END$$

##执行存储过程
CALL genBillsNoProc('t_common_system',@data_t);
SELECT @data_t;
2014年4月18日 00:03

2个答案 按时间排序 按投票排序

0 0

采纳的答案

SET data_t := @colName;

你对sql_2进行select之后将结果加入到你的out  data_t中了吗?
没有吧,那怎么会返回最大值呢?

2014年4月19日 09:09
0 0

是不是数据库没练好

2014年4月18日 14:33

相关推荐

    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语句集合。它们允许开发人员封装复杂的逻辑,提高代码复用性和数据库操作效率。...理解并掌握动态SQL和返回值的处理是提升MySQL存储过程编程能力的关键步骤。

    mysql存储过程教程

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

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

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

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

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

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

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

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

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

    MySQL存储过程编程.pdf

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

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

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

    mysql存储过程动态创建多列

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

    MySQL存储过程学习

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

    MySQL 存储过程入门到精通

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

    mysql存储过程调试工具

    MySQL存储过程是数据库管理系统中的一种重要功能,它允许开发者编写一系列复杂的SQL语句,并作为一个单元进行执行,提高代码复用性和效率。然而,与普通的编程语言一样,存储过程的调试同样至关重要,因为错误的存储...

    mysql存储过程——用于数据库的备份与还原

    MySQL存储过程是数据库管理系统中的一种重要功能,它允许程序员或数据库管理员预编译一系列SQL语句,形成一个可重用的程序单元。在本场景中,我们关注的是如何利用存储过程进行数据库的备份与还原,这在数据管理中至...

    MySQL存储过程.rar

    MySQL存储过程是数据库管理系统中的一种重要功能,它允许开发者预编译一系列的SQL语句,形成一个可重复执行的单元,极大地提高了数据库操作的效率和便捷性。在MySQL中,存储过程可以包含复杂的业务逻辑,比如条件...

    mysql存储过程、触发器.pdf

    MySQL 存储过程是指一组为了完成特定功能的 SQL 语句集合。存储过程的优点包括: 1. 封装性:存储过程可以将多个 SQL 语句封装在一起,方便调用和维护。 2. 可增强 SQL 语句的功能和灵活性:存储过程可以包含复杂...

Global site tag (gtag.js) - Google Analytics