#用户变量 set @t = now(); SELECT DATE_FORMAT(NOW(),'%b %d %Y %h:%i %p') #使用SET初始化用户变量 SET @ab = 'abcee'; SELECT @ab := 'fghi'; SELECT @ab; #使用SELECT初始化用户变量并赋值 SELECT @var1 := '123456789'; SELECT @var1; #判断存储过程是否存在并删除; DROP PROCEDURE IF EXISTS MYpROC; CREATE PROCEDURE MyProc ( IN dMonth INT, #会话变量 IN dDay INT, #会话变量 OUT dTotalCount INT #会话变量 ) begin #声明会话变量 DECLARE MyVar int; #使用SELECT语句为用户变量赋值 SELECT @var1 := '9999999'; #条件查询 SELECT * from dc_log WHERE MONTH(AddTime) = dMonth AND Day(AddTime) = dDay; #通过SELECT……INTO语句赋值 SELECT COUNT(1) INTO dTotalCount from dc_log WHERE MONTH(AddTime) = dMonth AND Day(AddTime) = dDay; #通过SET语句赋值 SET MyVar = dTotalCount; #输出会话变量 SELECT MyVar; end #调用存储过程 CALL myproc(9,21,@total); #输出参数 select @total; SELECT * from dc_log; #显示所有全局变量 show global variables; #查询最后一个自增ID SELECT @@IDENTITY; #查询本地计算机名称 SELECT @@hostname; #查询MYSQL版本 SELECT @@Version; #声明SQL变量,并使用英文的?作为占为符 set @strSQL = 'SELECT * FROM dc_log WHERE UserName = ?'; #预编译SQL,并赋值 PREPARE stmt1 FROM @strSQL; #声明要传递的参数变量(用户变量) set @uname = 'admin'; #执行SQL语句 EXECUTE stmt1 USING @uname;
单独使用EXECUTE的存储过程示例:
#判断存储过程是否存在并删除; DROP PROCEDURE IF EXISTS execSQL; CREATE PROCEDURE execSQL ( ) BEGIN DECLARE strSQL varchar(500); SET strSQL = 'SELECT * FROM dc_mail'; -- 定义用户变量(格式@,不需要定义它的数据类型) set @sql =strSQL; -- 编译拼接的SQL字符串 PREPARE _executeSql from @sql; -- 执行编译后的SQL语句 EXECUTE _executeSql; -- 释放编译后的SQL语句 DEALLOCATE PREPARE _executeSql; END CALL execSQL;