存储过程

一.基础语法

说明

delimiter //

一般情况下MYSQL以;结尾表示确认输入并执行语句,但在存储过程中;不是表示结束,因此可以用该命令将;号改为//表示确认输入并执行。

mysql> delimiter //      #定义结束符号为//
mysql> CREATE PROCEDURE simpleproc (OUT param1 INT)
-> BEGIN
-> SELECT COUNT(*) INTO param1 FROM t;
-> END;
-> //                  #//标识存储过程结束
Query OK, 0 rows affected (0.00 sec)
mysql> delimiter ;           #更换结束符号为;
mysql> CALL simpleproc(@a);
Query OK, 0 rows affected (0.00 sec)
mysql> SELECT @a;
+------+
| @a |
+------+
| 3 |
+------+
1 row in set (0.00 sec)

1.创建存储过程

基本语法

CREATE PROCEDURE PROCEDURE_NAME
(
  [in|out|inout] param datatype
)
BEGIN
END;
  • IN 输入参数
    表示该参数的值必须在调用存储过程时指定,在存储过程中修改该参数的值不能被返回,为默认值
  • OUT 输出参数
    该值可在存储过程内部被改变,并可返回
  • INOUT 输入输出参数
    调用时指定,并且可被改变和返回

2.调用存储过程

CALL PROCEDURE_NAME()

3.删除存储过程

drop procedure sp_name//

说明:不能在一个存储过程中删除另一个存储过程,只能调用另一个存储过程

4.其他常用命令

显示数据库中所有存储的存储过程基本信息,包括所属数据库,存储过程名称,创建时间等

show procedure status

显示某一个存储过程的详细信息

show create procedure sp_name

二.数据结构

1.变量

自定义变量
语法

DECLARE param INT DEFAULT 100;

变量分为用户变量系统变量

  • 系统变量又分为会话和全局级变量
  • 用户变量名一般以@开头,滥用用户变量会导致程序难以理解及管理

用户变量的使用

--单变量
SELECT 'Hello World' INTO @x; 
--多变量
SELECT @LEADER_USER_ID:=GROUP_CONCAT(id),@LEADER_USER_NAME:=GROUP_CONCAT(name) FROM USER_INFO WHERE ORG_ID = 'GUANGDONG'; 

2.流程控制

  • 顺序结构
  • 分支结构
    if
    case
  • 循环结构
    for循环
    while循环
    loop循环
    repeat until循环

注:
区块定义,常用
begin
......
end;
也可以给区块起别名,如:
lable:begin
......
end lable;
可以用leave lable;跳出区块,执行区块以后的代码

你可能感兴趣的:(存储过程)