我现在想通过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;
相关推荐
本篇文章是对mysql存储过程在动态SQL内获取返回值进行了详细的分析介绍,需要的朋友参考下
drop PROCEDURE if exists my_procedure; create PROCEDURE my_procedure() BEGIN declare my_sqll varchar(500);... 您可能感兴趣的文章:mysql 存储过程中变量的定义与赋值操作mysql存储过程详解mysq
本文实例讲述了MySQL存储过程中实现执行动态SQL语句的方法。分享给大家供大家参考。具体实现方法如下: mysql> mysql> delimiter $$ mysql> mysql> CREATE PROCEDURE set_col_value -> (in_table VARCHAR(128), -...
MySQL 查询存储过程是一种存储在 MySQL 服务器中的 SQL 代码段,可以被多个客户端 多次调用。它们被用来简化复杂的 SQL 查询,执行常见的任务,以及实现数据逻辑。通过 存储过程,我们可以在一次操作中,执行多个 ...
MySQL 查询存储过程是一种存储在 MySQL 服务器中的 SQL 代码段,可以被多个客户端 多次调用。它们被用来简化复杂的 SQL 查询,执行常见的任务,以及实现数据逻辑。通过 存储过程,我们可以在一次操作中,执行多个 ...
资源包中囊括了MySQL数据库中的存储过程的使用包含的基本结构及日常所使用到的基本函数的使用【包括java端调用存储过程,创建临时表,动态执行sql语句,过程的递归调用,指针循环取数,批量创建表删除表,树状结构的...
SQL语句需要先编译然后执行,而存储过程(Stored Procedure)是一组为了完成特定功能的SQL语句集,经编译后存储在数据库中,用户通过指定存储过程的名字并给定参数(如果该存储过程带有参数)来调用执行它。...
一、什么是MySQL存储过程? 在大型项目中,有时候需要重复执行能够完成特定功能的SQL语句集,而MySQL为我们提供了存储过程的概念,存储过程是数据库中的一个重要对象,它是存储在数据库中的一组完成特定功能的...
数据数据库编程 创建存储过程1 课程目标 1)了解 ——存储过程的优点; 2)理解 —— 存储过程...当然,当存储过程体中只有一个SQL语句时可以省略BEGIN-END标志。 创建存储过程 proc_parameter的参数如下: [ IN | OUT
本文实例讲述了mysql存储过程原理与使用方法。分享给大家供大家参考,具体如下: 存储过程包含了一系列可执行的sql语句,存储过程存放于MySQL中,通过调用它的名字可以执行其内部的一堆sql 存储过程的优点 #1. 用于...
阅读实验教材《SQL Server 2012数据库管理与开发》第137页到155页的内容,掌握存储过程的概念、了解存储过程的类别(系统存储过程,用户自定义存储过程,扩展存储过程);掌握存储过程的建立;掌握存储过程的两种...
主要介绍了mysql创建存储过程实现往数据表中新增字段的方法,结合实例形式对比分析了通过存储过程新增字段相关操作技巧,需要的朋友可以参考下
dapper的调用各种存储过程的方法的帮助类文档,可通过该文档了解并学会使用Dapper,并且调用Dapper
执行SQL语句,返回影响的记录数 执行MySql和Oracle滴混合事务 执行多条SQL语句,实现数据库事务。 执行带一个存储过程参数的的SQL语句。 向数据库里插入图像格式的字段 执行一条计算查询结果语句,返回查询结果 执行...
7.使用SQL存储过程要特别注意的问题 1.sql存储过程概述 在大型数据库系统中,存储过程和触发器具有很重要的作用。无论是存储过程还是触发器,都是SQL 语句和流程控制语句的集合。就本质而言,触发器也是一种存储...
本文实例讲述了mysql存储过程之错误处理。分享给大家供大家参考,具体如下: 当存储过程中发生错误时,重要的是适当处理它,例如:继续或退出当前代码块的执行,并发出有意义的错误消息。其中mysql提供了一种简单的...
本文实例讲述了mysql存储过程原理与用法。分享给大家供大家参考,具体如下: 本文内容: 什么是存储过程 存储过程的创建 存储过程的使用 查看存储过程 修改存储过程 删除存储过程 首发日期:2018-04-17 什么...
1.存储过程只在创造时进行编译,以后每次执行存储过程都不需再重新编译,而一般SQL语句每执行一次就编译一次,所以使用存储过程可提高数据库执行速度。 2.当对数据库进行复杂操作时(如对多个表进行Update、Insert、...