mysql 存儲過程實現動態sql


mysql 5.0 以后,才支持動態sql。這里介紹兩種在存儲過程中的動態sql:

1、第一種方式,拼接方式

示例:
CREATE PROCEDURE `proc_demo1`(in type VARCHAR(32),in id VARCHAR(32),in username VARCHAR(500))
BEGIN
	# 定義變量
	DECLARE var_sql VARCHAR(2000);
	# 拼接sql
 	set var_sql = " select * from user where 1=1";
	if type = 0 then
		set var_sql = CONCAT(var_sql,' and id = ','\'',id,'\'');
	end if;
	if type =1 then 
		set var_sql = CONCAT(var_sql,' and username = ','\'',username,'\'');
	END IF;
	
	# select var_sql ;
	set @sql = var_sql;
	# 預處理動態sql語句
	PREPARE stmt  from @sql;	
	# 執行sql
	EXECUTE stmt ;
	# 釋放prepare
	deallocate prepare stmt; 	
END

2、第二種方式,使用占位符方式

CREATE DEFINER=`root`@`localhost` PROCEDURE `proc_demo4`(in type varchar(32), in id varchar(32),in username varchar(500),in sex varchar(2000))
BEGIN
	declare var_sql varchar(500);   
	set var_sql = " select * from user where 1=1";
	 
	if type =0 then
	 set var_sql =CONCAT(var_sql, " and id = ?");
	 # 參數賦值
	 set @id_param = id;
	end if;
	
	if type =1 then 
	 set var_sql =CONCAT(var_sql, " and username = ?");
	 # 參數賦值
	 set @username_param = username;
	end if;
	
	if type =2 then 
	 set var_sql =CONCAT(var_sql, " and sex find_in_set(sex,?) ");
	 # 參數賦值
	 set @sex_param = sex;
	end if;
	 
	set @sql = var_sql;
	PREPARE stmt FROM @sql;
		 
	# 執行sql,同時使用參數
	if type = 0 then 
		EXECUTE stmt USING @id_param;
	end if;
	if type = 1 then
		EXECUTE stmt USING @username_param;
	end if;
	if type = 2 then
		EXECUTE stmt USING @sex_param;
	end if;
	
	deallocate prepare stmt;
END

關於存儲過程如何使用 in 條件:

find_in_set(字段,'aaa,bbb,ccc')

轉發需注明出處,歡迎交流! 1057449102@qq.com


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM