MySQL 创建存储过程执行动态SQL

第一次使用mysql数据库创建存储过程 折腾了一番。

呵呵,不过还是挺值得的,折腾出来了,贴出来供大家看看。

写这个存储过程的目的是这样的, 我想通过执行此存储过程传递一个表的名称,然后它就能自动的统计出来表中第一列中的最大值。

#删除存储过程;
DROP PROCEDURE genBillsNoProc;

#创建存储过程;
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_dept',@data_t); 
SELECT @data_t maxValue;

执行结果:

maxValue;
104

猜你喜欢

转载自zhouhaitao.iteye.com/blog/2050015