🔥码云GVP开源项目 12k star Uniapp+ElementUI 功能强大 支持多语言、二开方便! 广告
[TOC] 我们常用的操作数据库语言SQL语句在执行的时候需要要先编译,然后执行,而存储过程(Stored Procedure)是一组为了完成特定功能的SQL语句集,经编译后存储在数据库中,用户通过指定存储过程的名字并给定参数(如果该存储过程带有参数)来调用执行它。 ## 声明变量 ~~~ mysql>SET @name="学并思"; mysql>select @name; ~~~ ## 查看存储过程 ~~~ mysql>SHOW PROCEDURE STATUS\G ~~~ ## 调用存储过程 ~~~ mysql>call 存储过程名(); ~~~ ## 删除存储过程 ~~~ mysql>DROP PROCEDURE 存储过程名; ~~~ ## 存储过程的创建 **语法** ~~~ CREATE PROCEDURE 过程名 ([过程参数[,...]]) [特性 ...] 过程体 ~~~ 实例 ~~~ mysql> DELIMITER // mysql> CREATE PROCEDURE getcountstu(OUT s int) -> BEGIN -> SELECT COUNT(id) INTO s FROM stu; -> END -> // mysql> DELIMITER ; mysql>call getcountstu(@s); mysql>select @s; ~~~ **例子解析:** 这里需要注意的是DELIMITER //和DELIMITER ;两句,DELIMITER是分割符的意思,因为MySQL默认以";"为分隔符,如果我们没有声明分割符,那么编译器会把存储过程当成SQL语句进行处理,则存储过程的编译过程会报错,所以要事先用DELIMITER关键字申明当前段分隔符,这样MySQL才会将";"当做存储过程中的代码,不会执行这些代码,用完了之后要把分隔符还原。 存储过程根据需要可能会有输入、输出、输入输出参数,这里有一个输出参数s,类型是int型,如果有多个参数用","分割开。 过程体的开始与结束使用BEGIN与END进行标识。 上面资料摘录于互联网 ## 存储过程的参数 MySQL存储过程的参数用在存储过程的定义,共有三种参数类型,IN,OUT,INOUT,形式如:CREATE PROCEDURE([[IN |OUT |INOUT ] 参数名 数据类形...]) 1. IN 输入参数:表示该参数的值必须在调用存储过程时指定,在存储过程中修改该参数的值不能被返回,为默认值 2. OUT 输出参数:该值可在存储过程内部被改变,并可返回 3. INOUT 输入输出参数:调用时指定,并且可被改变和返回 ### IN参数例子 ~~~ mysql > DELIMITER // mysql > CREATE PROCEDURE demo_in_parameter(IN p_in int) -> BEGIN -> SELECT p_in; -> SET p_in=2; -> SELECT p_in; -> END; -> // mysql > DELIMITER ; mysql > SET @p_in=1; mysql > CALL demo_in_parameter(@p_in); ~~~ ### OUT参数例子 ~~~ mysql > DELIMITER // mysql > CREATE PROCEDURE demo_out_parameter(OUT p_out int) -> BEGIN -> SELECT p_out; -> SET p_out=2; -> SELECT p_out; -> END; -> // mysql > DELIMITER ; mysql > SET @p_out=1; mysql > CALL sp_demo_out_parameter(@p_out); ~~~ ### INOUT参数例子 ~~~ mysql > DELIMITER // mysql > CREATE PROCEDURE demo_inout_parameter(INOUT p_inout int) -> BEGIN -> SELECT p_inout; -> SET p_inout=2; -> SELECT p_inout; -> END; -> // mysql > DELIMITER ; mysql > SET @p_inout=1; mysql > CALL demo_inout_parameter(@p_inout) ; ~~~ 资料摘录于互联网。