@Chiang
2020-10-01T15:49:35.000000Z
字数 1607
阅读 740
2020-08
MySQL
存储过程就是一条或者多条 SQL 语句的集合,可视为批文件,但是其作用不仅限于批处理.
存储程序可以分为存储过程和函数, MySQL 中创建存储过程和函数使用的语句分别是:
CREATE PROCEDURE
和CREATE FUNCTION
使用CALL
语句来调用存储过程,只能用输出变量返回值.函数可以从语句外调用(即通过引用函数名),也能返回标量值.存储过程也可以调用其他存储过程.
CREATE PROCEDURE sp_name ( [proc_parameter] )
[characteristics ...] routine_body
# CREATE PROCEDURE 创建存储函数的关键字
# sp_name 存储过程名称
# proc_parameter 存储过程参数列表
## [ IN | OUT | INOUT ] param_name type
# routine_body sql代码内容
DELIMITER //
CREATE PROCEDURE AvgFruitPrice()
BEGIN
SELECT AVG(f_price) AS avgprice FROM fruits;
END//
DELIMITER ;
DELIMITER //
语句的作用是将MySQL的结束符设置为//
,因为MySQL默认的语句结束符为分号;
,为了避免与存储过程中SQL语句结束符相冲突,需要使用DELIMITER改变存储过程的结束符,并以END//
结束存储过程.存储过程定义完毕之后再使用DELIMITER;
恢复默认结束符.DELIMITER也可以指定其他符号作为结束符.- 当使用DELIMITER命令时,应该避免使用反斜杠
\
字符,因为反斜杠是MySQL的转义字符.
DELIMITER //
CREATE FUNCTION NameByZip()
RETURNS CHAR(50)
RETURN (SELECT s_name FROM suppliers WHERE s_call = '48075');
//
DELIMITER ;
CALL CountProcl (101, @num);
SELECT CountProc2(101);
SHOW PROCEDURE STATUS LIKE `C%` \G
SHOW CREATE FUNCTION test.CountProc \G
SELECT * FROM infomation_schema.Routines WHERE ROUTINE_NAME='CountProc' AND ROUTINE_TYPE = 'FUNCTION' \G
ALTER PROCEDURE CountProc MODIFIES SQL DATA SQL SECURITY INVOKER;
ALTER FUNCTION CountProc READS SQL DATA COMMENT 'FIND NAME';
DROP PROCEDURE CountProc;
DROP FUNCTION CountPpoc;
参考资料:
MySQL5.7从入门都精通