我現(xiàn)在想通過mysql的存儲過程執(zhí)行動態(tài)SQL,傳遞一個表名查詢,根據(jù)表名查詢表中的第一個列。
根據(jù)第一列獲取其列中的最大值,下面是我寫的存儲過程。但始終獲取不到最大值的結(jié)果,請幫忙看一下 是什么原因?
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$$
##執(zhí)行存儲過程
CALL genBillsNoProc('t_common_system',@data_t);
運行存儲過程返回結(jié)果就是一個列名:
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");
#執(zhí)行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);
#執(zhí)行sql_2SQL語句;
SET @second_sql=sql_2;
PREPARE stmt1 FROM @second_sql;
EXECUTE stmt1;
#設(shè)置返回結(jié)果;
SET data_t := @sql_result;
END$$
##執(zhí)行存儲過程
CALL genBillsNoProc('t_common_system',@data_t);
SELECT @data_t;
本站僅提供存儲服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請
點擊舉報。