MySql存储过程

#用户变量
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;

 

MySql存储过程

上一篇:2.3 sqlmap目录及结构


下一篇:gdb 具体化查看内存