数据库学习笔记

81 阅读1分钟

数据库学习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] 存储过程或函数的名