数据库学习2024/3/19
存储过程与存储函数
1.创建存储过程
#语法:
DESC 表名
DELIMITER $(//)
CREATE PROCEDURE 存储过程名(IN \ OUT \INOUT 参数名 参数类型...)
BEGIN
存储过程体END $
DELIMITER ;
类似Java中的方法:
修饰符 返回类型 方法名(参数类型 参数名){
方法体;
}
创建存储过程需要以 delimiter $(\)开头,delimiter ; 结尾
2.存储过程的调用
2.1无参数
CALL 存储过程名();
2.2有参数OUT
创建时
DELIMITER $
CREATE PROCEDURE 存储过程名( OUT 参数名 参数类型...)
#参数类型与原表的类型有关
BEGIN
SELECT 查询内容 INTO 参数名 FROM 表名END $
DELIMITER ;
调用:
CALL 存储过程名(@参数名);
查看变量值
SELECT @参数名;
2.3有参数IN
创建时与OUT时差不多,存储过程体与无参数时一样
调用方式1:
CALL 存储过程名(具体字段值);
调用方式2:
SET @参数名 = 具体字段值
CALL 存储过程名(@参数名);
2.4即有IN 又有 OUT
DELIMITER $
CREATE PROCEDURE 存储过程名( IN 参数名1 参数类型,OUT 参数名2 参数类型...)
#参数类型与原表的类型有关
BEGIN
SELECT 查询内容 INTO 参数名2 FROM 表名END $
DELIMITER ;
调用
SET @参数名1 = 具体字段值
CALL 存储过程名(@参数名1,@参数名2);
查看
SET @参数名2
2.5有参数INOUT
是IN与OUT的混合,包括IN和OUT的特点,只是参数变为了INOUT,其他无变化
且需要输出into参数名
调用:
SET @参数名 = 具体字段值
CALL 存储过程名(@参数名);
3存储函数的使用
语法:
在函数创建前执行此语句,保证函数会创建成功 #就不用声明函数特征
SET GLOBAL log_bin_trust_function_creators = 1;
DELIMITER $
CREATE FUNCTION 函数名(参数名 参数类型,...) #默认是IN参数类型
RETURNS 返回值类型
#函数特征,可以加也可以不加
BEGIN
函数体 #函数体中肯定有 RETURN 语句
return(select 语句)
END $
DELIMITER ;
调用
SELECT 函数名(实参列表)
4.存储过程和存储函数的查看
方式1:使用SHOW CREATE语句查看存储过程和存储函数的创建信息
SHOW CREATE (PROCEDURE \ FUNCTION) 名称
方式2:使用SHOW STATUS语句查看存储过程和函数的状态信息
SHOW {PROCEDURE | FUNCTION} STATUS LIKE '函数名 / 存储过程名'
方式3: 从information_schema.Routines表中查看存储过程和函数的信息
SELECT * FROM information_schema.Routines
WHERE ROUTINE_NAME='存储过程或函数的名'
5.存储过程和存储函数的修改
只修改特性
ALTER {PROCEDURE | FUNCTION} 存储过程或函数的名 [characteristic ...]
6.删除存储过程和存储函数
DROP {PROCEDURE | FUNCTION} [IF EXISTS] 存储过程或函数的名