mysql 存儲過程
CREATE PROCEDURE pro_province_report (IN startDate VARCHAR(20),IN endDate VARCHAR(20),IN SourceType INT) /* 功能:根據時間,來源SourceType 統計 每個省份的 注冊用戶 投稿數 作品點擊量 投票量 參與人數 pro_province_report(); */ BEGIN DECLARE temp_user_sql VARCHAR(500); DECLARE temp_works_sql VARCHAR(500); #條件 DECLARE dateStr VARCHAR(100); DECLARE dateStr_w VARCHAR(100); #來源條件 DECLARE sourceStr VARCHAR(100); DECLARE sourceStr_w VARCHAR(100); IF(startDate!=''&&endDate!='') THEN SET dateStr=CONCAT( ' AND DATE(addDate)>=DATE("',startDate,'") AND DATE(addDate)<=DATE("',endDate,'")' ); SET dateStr_w=CONCAT( ' AND DATE(w.addDate)>=DATE("',startDate,'") AND DATE(w.addDate)<=DATE("',endDate,'")' ); ELSE SET dateStr=" AND 1=1 "; SET dateStr_w=" AND 1=1 "; END IF; IF(SourceType>0) THEN SET sourceStr=CONCAT(' AND SourceType="',SourceType,'" '); SET sourceStr_w=CONCAT(' AND w.SourceType="',SourceType,'" '); ELSE SET sourceStr=" AND 1=1 "; SET sourceStr_w=" AND 1=1 "; END IF; #用戶注冊 臨時表
DROP TEMPORARY TABLE IF EXISTS memberUserTemp;
SET temp_user_sql =CONCAT('CREATE TEMPORARY TABLE memberUserTemp SELECT COUNT(1) accountSum,provinceID,province FROM MEMBERUSER WHERE provinceID>0 ',dateStr,sourceStr,' GROUP BY provinceID'); DROP TEMPORARY TABLE IF EXISTS memberUserTemp; set @temp_user_sql=temp_user_sql; #將連成成的字符串賦值給一個變量(可以之前沒有定義,但要以@開頭) prepare stmt from @temp_user_sql; #預處理需要執行的動態SQL,其中stmt是一個變量 EXECUTE stmt; #執行SQL語句 deallocate prepare stmt; #釋放掉預處理段 #投稿數 臨時表 SET temp_works_sql=CONCAT('CREATE TEMPORARY TABLE worksTemp SELECT COUNT(1) worksSum,provinceID,province FROM WORKS WHERE provinceID>0 ',dateStr,sourceStr,' GROUP BY provinceID'); DROP TEMPORARY TABLE IF EXISTS worksTemp; set @temp_works_sql=temp_works_sql; prepare stmt from @temp_works_sql; EXECUTE stmt; deallocate prepare stmt; END