命令行操作MySQL - 《存储过程》汇总

本文详细介绍了如何在MySQL中创建存储过程,包括设置变量、使用光标进行逐行处理、流程控制语句的应用,以及查看和删除存储过程的方法。通过实例演示了创建存储过程删除记录并返回自增ID的过程,以及查看存储过程定义的操作。
摘要由CSDN通过智能技术生成

这是命令行操作MySQL数据库系列博客的第二十四篇,今天这篇博客记录数据库《存储过程》详细的操作。《存储过程》跟函数类似,但比函数更难,这里篇博客就不讲解函数,仅仅只是详细的讲解《存储过程》的用法。(创建存储过程、定义变量、光标、流程控制、查看、删除)



一、存储过程的概念

存储过程和函数是在数据库中定义的一些SQL语句的集合,然后直接调用这些存储过程和函数来执行已经定义好的SQL语句。存储过程和函数可以避免开发人员重复编写相同的SQL语句。而且,存储过程和函数是在MySQL服务器中存储和执行的,可以减少客户器端和服务端的数据传输。

简单来讲,将多条SQL语句打包封装成存储过程,留下一个接口,通过调用这个接口,实现同时执行多条SQL语句。

通过本博客的学习,我们将了解存储过程的定义、作用,还可以了解创建、使用、查看、修改及删除存储过程及函数的方法。

为下面例子做准备

# 创建class表
create table class(id int AUTO_INCREMENT PRIMARY KEY, class_name varchar(128), teacher varchar(128), count int);
# 插入数据
insert into class values(101, 'C语言班', '红老师', 1), (102, 'C++班', '绿老师', 1), (103, 'qt班', '蓝老师', 2);

# 创建student表
create table student(id int AUTO_INCREMENT PRIMARY KEY, student_name varchar(128), sex enum('M', 'F'), class_id int);
# 插入数据
insert into student values(1, '小黄', 'M', 101), (2, '小白', 'M', 103), (3, '小紫', 'F', 102), (4, '小黑', 'M', 03);

# 创建gread表
create table grade(student_id int PRIMARY KEY, math tinyint unsigned, chinese tinyint unsigned, english tinyint unsigned);
# 插入数据
insert into grade values(1, 87, 96, 77), (2, 72, 64, 89), (3, 54, 69, 87), (4, 78, 79, 89);

在这里插入图片描述


二、创建存储过程

1. 创建

创建存储过程和函数是指将经常使用的一组SQL语句组合在一起,并将这些SQL语句当作一个整体存储在MySQL服务器中。存储程序可以分为存储过程和函数。在MySQL中创建存储过程使用的语句CREATE PROCEDURE。其语法形式如下:

DELIMITER $$
create PROCEDURE 存储过程名 ([[IN|OUT|INOUT] 参数名 参数类型], ..., [[IN|OUT|INOUT] 参数名 参数类型])
BEGIN
...SQL语句体...;
END;
$$
DELIMITER ;

上面的格式就是最普通的创建格式!

注意

  1. 创建前,因为创建存储过程中需要使用到分号‘;’,但是MySQL中默认分号‘;’作为结束符;所以为了该表这种关系,创建前需要改变MySQL的结束符,使用DELIMITER $$进行更改。当创建完成后,又得更改回来DELIMITER ;。

  2. 在创建过程中,需要指定“存储过程名”,因为创建完成后,需要使用到它进行调用存储过程。

  3. 参数列表:[[IN|OUT|INOUT] 参数名 参数类型]
    在上述语句中,每个参数由三部分组成,分别为输入/输出类型、参数名和参数类型。其中,输入/输出类型有三种类型,分别为IN(表示输入类型)、OUT(表示输出类型)、INOUT(表示输入/输出类型)。
    参数可无,可有一个,可有多个,多个参数需要使用逗号‘,’进行隔开。

  4. 存储过程里的SQL语句必须使用Begin…END进行包裹着,相当于C/C++中函数的大括号作用{}
    BEGIN
    …SQL语句体…;
    END;
    注意END后面有一个分号结束标志‘;’。

  5. 在具体创建存储过程时,存储过程名不能与已经存在的存储过程名重名,实战中推荐存储过程名命名为procedure_xxx或者proc_xxx

例一
创建一个名为proc_delete_student的存储过程,其实先功能:传入一个学生的id,然后在表中删除id对于学生的记录。
因为我们三张表都有联系,所以删除一条学生记录时,需要删除student表中该学生的记录,删除grade表中该学生的成绩记录,然后更该class表中统计个数的count字段。

mysql> DELIMITER $$		# 更改MySQL默认结束符
mysql> create PROCEDURE proc_delete_student (IN sid int)
    -> BEGIN
    -> declare cid int;		# 定义变量
    -> select class_id into cid from student where id = sid;
    -> delete from grade where student_id = sid;
    -> delete from student where id = sid;
    -> update class set count = count - 1 where id = cid;
    -> END;
    -> $$
Query OK, 0 rows affected (0.03 sec)

mysql> DELIMITER ;		# 更改MySQL默认结束符

在这里插入图片描述
创建成功,有一个输入int类型的参数sid,定义了int类型参数cid,一条查询语句将查询到的结果赋值给cid,两条删除记录,一条更新记录。

例二
调用存储过程,删除id为2的小白同学记录
需要使用call关键字。

call proc_delete_student(2);

在这里插入图片描述

这就存储过程的创建与使用,但是这种创建方式还是有问题的,刚刚我们删除了id为3的小白同学的记录,那么我们再删除一次呢?
创建存储过程时,我们没有做合法性检查,有可能会出问题。
具体整改,将在下面揭晓。


2. 在存储过程中使用变量

在存储过程和函数中,可以定义和使用变量。用户可以使用关键字DECLARE来定义变量,然后为变量赋值。这些变量的作用范围是在BEGIN…END程序段中。必须将变量定义在BEGIN…END程序段中,否则会报错!

(1). 定义变量

在MySQL中,可以使用DECLARE关键字来定义变量。定义变量的基本语法如下:
DECLARE 变量名[, ..., 变量名n] 类型 [DEFAULT 默认值];

其中,关键字DECLARE是用来声明变量的;可以同时定义多个变量,用‘,’逗号隔开;DEFAULT 默认值 子句将给变量符默认值,没有使用DEFAULT子句时,默认值为NULL。

例1
定义变量cid,数据类型为INT型,默认值为10,代码如下:

DECLARE cid INT DEFAULT 10;   

例2
定义变量sid1, sid2, sid3,数据类型为INT型,默认值为7,代码如下:

DECLARE sid1, sid2, sid3 INT DEFAULT 7;   

(2). 为变量赋值

a. SET赋值

在MySQL中可以使用关键字SET来为变量赋值,SET语句的基本语法如下:
SET 变量名 = 值 [, ..., 变量名 = 值];

其中,关键字SET用来为变量赋值;一个SET语句可以同时为多个变量赋值,各个变量的赋值语句之间用逗号隔开。

例1:
将变量cid赋值为88

SET cid = 88;

例2:
将变量sid1赋值为1;sid2赋值为2;sid3赋值为3

SET sid1 = 1, sid2 = 2, sid3 = 3;
b. 查询语句赋值

使用SELECT…INTO语句为变量赋值,其基本语法如下:
select 字段[, ..., 查询字段n] INTO变量[, ..., 变量n] from 表名 where 条件;

INTO前是查询的字段,INTO后是赋值的变量;可为多个变量同时赋值,但必须与字段一一对应。

例:
查询id为2的同学记录,将id和name赋值给变量sid和sname

select id, name INTO sid, sname from student where id = 2;
c. 高逼格的例子

首先先删除之前创建的那个存储过程

drop procedure if exists proc_delete_student;

if exists:判断是否有
proc_delete_student:存储过程名


创建一个存储过程,传入一个学生id,传出学生对应的班级姓名和班级统计个数

mysql> DELIMITER $$
mysql> create PROCEDURE proce_query_student_class_info(IN sid int, OUT cname varchar(128), OUT ccount int)
    -> BEGIN
    -> DECLARE tmp_name varchar(128);		# 定义变量
    -> DECLARE tmp_count int;
    -> DECLARE tmp_id int;
    -> select class_id INTO tmp_id from student where id = sid;		# 查询并赋值
    -> select class_name, count INTO tmp_name, tmp_count from class where id = tmp_id;
    -> SET cname = tmp_name, ccount = tmp_count;	# set赋值
    -> END;
    -> $$
Query OK, 0 rows affected (0.01 sec)

mysql> DELIMITER ;

在这里插入图片描述

调用

call proce_query_student_class_info(3, @name, @count);

查询

select @name, @count;

在这里插入图片描述

调用时,使用了用户变量@name 与 @count;
不必太在意用户变量是什么,只需要知道怎么使用就好!
@ + 变量名 :变量名是自己取的。

查询时,使用:select + @用户变量; 即可!可单独查询一个,可查询多个,查询多个使用逗号隔开!


3. 光标(游标)的使用

查询语句可能查询出多条记录,在存储过程和函数中使用光标来逐条读取查询结果集中的记录。有些书上将光标称为游标。光标的使用包括声明光标、打开光标、使用光标和关闭光标。光标必须声明在处理程序之前,并且声明在变量和条件之后。

在存储过程或函数中,可以使用光标对结果集进行循环处理。

  1. 游标的作用是对查询数据库所返回的记录进行遍历。

  2. 游标的属性:游标是只读的,也就是不能更新它。

  3. 游标是不能滚动的,也就是只能在一个方向上进行遍历,不能在记录之间随意进退,也不能跳过某些记录。

  4. 避免在已经打开游标的表上更新数据。游标使用游标对关系数据库来说极其重要,它是操作数据库服务器上记录的一种重要机制。在存储过程中使用游标,经过声明游标、打开游标、操作游标和关闭游标等几个步骤,将游标指向的数据取到本地,在结束时关闭游标。

我个人对于光标的理解:
一条SQL查询语句查出多条记录时,那么该如何获取查询到的记录呢?
可以使用光标,光标就像数组一样,存储查询到的多条记录,然后按照顺序一条一条的找到他们。
它是将数据一条一条的赋值给变量的。

提示
如果存储过程或函数中执行了SELECT语句,并且SELECT语句会查询出多条记录,这种情况最好使用光标来逐条读取记录,光标必须在处理程序之前且在变量和条件之后声明,而且光标使用完毕后一定要关闭。

(1). 声明光标

在MySQL中,可以使用DECLARE关键字来声明光标,其基本语法如下:

DECLARE 光标名 CURSOR FOR 查询语句;


创建一个名为cur_student 的光标

mysql> DELIMITER $$                                                                                
mysql> create procedure  proc_query_student (IN sid int, OUT cname varchar(128), OUT class_id  int )                                      
       BEGIN                                                  
       DECLARE cur_student CURSOR                     
       FOR SELECT name, class_id FROM  student;    
       END;                                                  
       $$   
                                                                               
mysql> DELIMITER ;

在上面的示例中,光标的名称为cur_student;SELECT语句部分是从表student中查询出字段name和class_id的值。

(2). 打开光标

在MySQL中,使用关键字OPEN来打开光标,其基本语法如下:
OPEN 光标名;

OPEN cur_student;			# 打开光标

(3). 使用光标

在MySQL中,使用关键字FETCH来使用光标,其基本语法如下:

FETCH 光标名 INTO 字段名[, ..., 字段名];

例:
下面将是一个完整的光标用法;不过光标一般配合条件判断语句一起使用,例如if、while等。将在下面继续讲解。

mysql> DELIMITER $$		# 改变MySQL结束符
mysql> create PROCEDURE proc_query_student (IN sid int, OUT cname varchar(128), OUT cid int)	# 声明存储过程
    -> BEGIN	# 过程开始
    -> DECLARE tmp_name varchar(128);		# 声明变量,默认值为NULL
    -> DECLARE tmp_cid int;
    -> DECLARE done int default 0;			# 声明变量,指定默认值0
    -> DECLARE cur_student CURSOR FOR select student_name, class_id from student where id = sid;	# 声明(创建)光标
    -> DECLARE continue handler for not found set done = 1;		# 将结束标志绑定到游标上
    -> OPEN cur_student;			# 打开光标
    -> select done;					# 输出绑定值
    -> FETCH cur_student into tmp_name, tmp_cid;	# 执行光标
    -> select done;					# 再次输出绑定值,用于观察光标是否执行完
    -> select tmp_name, tmp_cid;	# 起到调试作用,查看光标语句是否查询成功
    -> CLOSE cur_student;			# 关闭光标
    -> SET cname = tmp_name, cid = tmp_cid;		# 给变量赋值
    -> END;		# 过程结束
    -> $$		# 结束符标志
Query OK, 0 rows affected (0.01 sec)

mysql> DELIMITER ;		# 改变MySQL结束符

在这里插入图片描述

在这里插入图片描述

(4). 关闭光标

在MySQL中,使用关键字CLOSE来关闭光标,其基本语法如下:
CLOSE 光标名;

CLOSE cur_student;			# 关闭光标

在上面的示例中,关闭了这个名称为cur_student的光标。关闭了之后就不能使用FETCH来使用光标了。


4. 流程控制的使用

在存储过程和函数中,可以使用流程控制来控制语句的执行。在MySQL中,可以使用IF语句、CASE语句、LOOP语句、LEAVE语句、ITERATE语句、REPEAT语句和WHILE语句来进行流程控制。

(1). IF语句

IF语句用来进行条件判断。根据条件执行不同的语句。其语法的基本形式如下:

IF 条件 THEN 语句;
[ELSEIF 条件 THEN 语句;]
[ELSE 语句;]
END IF;

由IF开头,END IF结尾;
中间可以加入elseif 和 else,也可以不加入;
用法和C/C++类似。

例:
简单的例子,后面会结合循环和光标一起距离;
传入一个参数,判断参数大于十,参数加一赋值给输出参数,等于十,参数加二赋值给输出参数,小于十,参数加三赋值给输出参数。

mysql> DELIMITER $$
mysql> create PROCEDURE proce_if (IN indexs int, OUT counts int)
    -> BEGIN
    -> IF indexs > 10 THEN SET counts = indexs + 1;		# 如果indexs大于10,indexs + 1 赋值给counts
    -> ELSEIF indexs = 10 THEN SET counts = indexs + 2;	# 否则如果indexs等于10,indexs + 2赋值给counts
    -> ELSE SET counts = indexs + 3;	# 否则indexs + 10 赋值给counts
    -> END IF;		# IF语句结束标志
    -> END;			# 存储过程结束标志
    -> $$			# MySQL结束符
Query OK, 0 rows affected (0.01 sec)

mysql> DELIMITER ;

在这里插入图片描述
调用后,就可以使用用户变量进行接受查询了。

(2). CASE语句

CASE相当于C/C++中的switch语句,其语法相差不大。

CASE语句可实现比IF语句更复杂的条件判断,其语法的基本形式如下:

CASE 变量名
WHENTHEN 语句;
[WHENTHEN 语句;]
[ELSE 语句;]
END CASE;


简单的一个例子,传入参数,输出参数

mysql> DELIMITER $$
mysql> create PROCEDURE proc_case (IN level int, OUT power int)
    -> BEGIN
    -> CASE level	# 相当于C/C++:switch (level)
    -> WHEN 10 THEN SET power = level + 10;	# 当level为10,执行语句
    -> WHEN 20 THEN SET power = level + 20;
    -> ELSE SET power = level + 1;	# 相当于C/C++:defalut语句
    -> END CASE;	# CASE结束标志
    -> END;
    -> $$
Query OK, 0 rows affected (0.01 sec)

mysql> DELIMITER ;

在这里插入图片描述
传入参数20,根据case对比,跳到对于语句,执行+20操作,然后赋值给输出参数。

(3). LOOP语句

LOOP,相当于C/C++的循环体语句。

LOOP语句可以使某些特定的语句重复执行,实现一个简单的循环。LOOP语句本身没有停止循环,只有遇到LEAVE语句等才能停止循环。LOOP语句的语句形式如下:

[_label:] LOOP             
statement_list                  
END LOOP [_label] ;

其中,参数_label和参数_label分别表示循环开始和结束的标签,这两个标志必须相同,而且都可以省略 ;参数statement_list表示需要循坏执行的语句。

标签是自己写的!


请看下面第四点LEAVE语句,LOOP将与LEAVE一起使用。

(4). LEAVE语句

LEAVE,相当于C/C++中的break语句。

LEAVE语句主要用于跳出循环控制,其语法形式如下:

LEAVE _label;                  

其中,参数_label表示循环的标志。


传入一个参数,参数赋值给用户变量,用户变量在循环体中自增,当用户变量大于或等于100时,结束循环,用户变量赋值输出变量,结束存储过程。

mysql> DELIMITER $$
mysql> create PROCEDURE proc_loop_leave (IN input int, OUT output int)
    -> BEGIN
    -> SET @inp = input;	# 输入参数赋值用户变量
    -> add_input : LOOP		# 循环开始
    -> SET @inp = @inp + 1;
    -> IF @inp >= 100 THEN LEAVE add_input;		# if判断,当用户变量>=100时,执行LEAVE结束循环
    -> END IF;		# if结束标志
    -> END LOOP add_input;	# 循环LOOP结束标志
    -> SET output = @inp;
    -> END;		# 存储过程结束标志
    -> $$
Query OK, 0 rows affected (0.01 sec)

mysql> DELIMITER ;

在这里插入图片描述

此例子中,结合了IF、LOOP、LEAVE、用户变量一起使用。

(5). ITERATE语句

ITERATE,相当于C/C++中的continue。

ITERATE语句也是用来跳出循环的语句,但是ITERATE语句是跳出本次循环,然后直接进入下一次循环,ITERATE语句的语法形式如下:

ITERATE _label;  

其中,参数_label表示循环的标志。


统计0 - 99中不能整除3的个数。

注意,代码中用到的MOD函数,当返回值为0,说明参数一可以整除参数二。

mysql> DELIMITER $$
mysql> create PROCEDURE proc_iterate(IN input int, OUT output int)
    -> BEGIN
    -> DECLARE count int DEFAULT 0;		# 声明变量,指定默认值0
    -> SET @inp = input;	# 输入变量赋值用户变量
    -> mod_input : LOOP		# 循环开始
    -> SET @inp = @inp + 1;
    -> IF @inp >= 100 THEN LEAVE mod_input;		# 判断如果用户变量>=100就结束循环
    -> ELSEIF MOD(@inp, 3) = 0 THEN ITERATE mod_input;	# 否则如果用户变量除以3等于0,则跳过当前循环
    -> END IF;		# if结束标志
    -> SET count = count + 1;	# 统计不能整除3的个数
    -> END LOOP mod_input;		# 循环结束标志
    -> SET output = count;		
    -> END;						# 存储过程结束标志 
    -> $$
Query OK, 0 rows affected (0.01 sec)

mysql> DELIMITER ;

在这里插入图片描述

(6). REPEAT语句

REPEAT语句是有条件控制的循环语句。当满足特定条件时,就会跳出循环语句。REPEAT语句的基本语法形式如下:

[_label:] REPEAT        
statement_list;       
UNTIL search_condition 
END REPEAT [_label]      

其中,参数statement_list表示循环的执行语句;参数search_condition表示结束循环的条件,满足该条件时循环结束。

REPEAT,相当于C/C++中的do…while循环。仅有的差别是,C/C++中的do…while循环,满足条件时才进行循环;MySQL中的REPEAT循环,不满足条件时才进行循环。

注意:UNTIL search_condition 条件尾部不需要添加 ’ ; ’ 分号!!!


统计0 - 100中不能整除3的个数。

mysql> DELIMITER $$
mysql> create PROCEDURE proc_iterate(IN input int, OUT output int)
    -> BEGIN
    -> DECLARE count int DEFAULT 0;
    -> SET @inp = input;
    -> repeat_label : REPEAT
    -> SET @inp = @inp + 1;
    -> IF MOD(@inp, 3) = 0 THEN ITERATE repeat_label;
    -> END IF;
    -> SET count = count + 1;
    -> UNTIL @inp = 100
    -> END REPEAT repeat_label;
    -> SET output = count;
    -> END;
    -> $$
Query OK, 0 rows affected (0.01 sec)

mysql> DELIMITER ;

在这里插入图片描述

(7). WHILE语句

WHILE语句也是有条件控制的循环语句,但WHILE语句和REPEAT语句是不一样的。WHILE语句是当满足条件时执行循环内的语句。WHILE语句的基本语法形式如下:

[_label:] WHILE search_condition DO   
statement_list                      
END WHILE [_label]           

其中,参数statement_condition表示循环执行的条件,满足该条件时循环执行;参数statement_list表示循环的执行语句。


统计0 - 100中不能整除3的个数。

mysql> DELIMITER $$
mysql> create PROCEDURE proc_while (IN input int, OUT output int)
    -> BEGIN
    -> declare count int DEFAULT 0;
    -> SET @inp = input;
    -> while_label : WHILE @inp <= 100 DO
    -> IF MOD(@inp, 3) = 0 THEN
    -> SET @inp = @inp + 1;
    -> ITERATE while_label;
    -> END IF;
    -> SET count = count + 1;
    -> SET @inp = @inp + 1;
    -> END WHILE while_label;
    -> SET output = count;
    -> END;
    -> $$
Query OK, 0 rows affected (0.01 sec)

mysql> DELIMITER ;

在这里插入图片描述

(8). 流程控制综合运用

a. 例一,循环访问光标操作,访问光标中的所有记录
mysql> DELIMITER $$
mysql> create PROCEDURE proc_query_students ()		# 创建存储过程
    -> BEGIN
    ->     DECLARE tmp_name varchar(128);	# 声明变量,默认值为NULL
    ->     DECLARE tmp_cid int;
    ->     DECLARE done int DEFAULT 0;		# 声明变量,指定默认值为0
    ->     DECLARE cur_student CURSOR FOR select student_name, class_id from student;	# 声明(创建)光标
    ->     DECLARE continue handler for not found SET done = 1;	# 将结束标志绑定到游标上,数据读取完,done自动赋值1
    ->     OPEN cur_student;	# 打开光标
    ->     read_loop : LOOP		# 开始循环
    ->         FETCH cur_student INTO tmp_name, tmp_cid;	# 执行光标,将去读到的值赋值
    ->         IF done = 1 THEN		# 如果done等于1
    ->             LEAVE read_loop;	# 执行leave结束read_loop循环
    ->         END IF;	# if语句结束标志
    ->         select tmp_name, tmp_cid;	# 输出读取到的值
    ->     END LOOP read_loop;	# 循环结束标志
    ->     CLOSE cur_student;	# 关闭光标
    -> END;		# 存储过程结束标志
    -> $$
Query OK, 0 rows affected (0.01 sec)

mysql> DELIMITER ;

在这里插入图片描述
执行调用:
在这里插入图片描述
将表中仅有的三条记录查询输出来了。

b. 例二,在学生表中插入一条记录,并返回记录的自增长id
mysql> DELIMITER $$
mysql> create PROCEDURE proc_insert_student_id (IN p_name varchar(128), IN p_class_id int, IN p_sex char(1), OUT rid int)
    -> BEGIN
    ->     insert into student(student_name, class_id, sex) values(p_name, p_class_id, p_sex);
    ->     select last_insert_id() INTO rid;	# 查询当前客户端最后一次插入数据的id记录
    -> END;
    -> $$
Query OK, 0 rows affected (0.01 sec)

mysql> DELIMITER ;

last_insert_id():该函数,可以将最后一次插入的数据的id查询出来,使用into语句可以将查询到的数据赋值给后者。
在这里插入图片描述
执行调用:
在这里插入图片描述
完美,正确的将最后一次插入数据的id查询并返回出来。


三、查看存储过程

存储过程创建以后,用户可以通过SHOW STATUS语句来查看存储过程的状态,也可以通过SHOW CREATE语句来查看存储过程的定义。用户也可以通过查询information_schema数据库下的Routines表来查看存储过程的信息。

1. SHOW STATUS语句查看存储过程

在MySQL中,可以通过SHOW STATUS语句。其基本语法形式如下:

SHOW PROCEDURE STATUS [ like ‘pattern’ ] ;

参数LIKE 'pattern’用来匹配存储过程的名称。

如果但看是写SHOW PROCEDURE STATUS,他也可以查询出来,不过会将所有的存储过程都查询出来,导致很乱,所以建议结合模糊查询一起使用。

例:

show procedure status like '%proc%';

在这里插入图片描述
这就是为什么推荐存储过程命名以‘proc’开头,查询时,就可以使用模糊查询简简单单的查出了。

2. 使用SHOW CREATE语句查看存储过程的定义

在MySQL中,可以通过SHOW CREATE语句查看存储过程的状态,语法形式如下:

show create procedure 存储过程名;

show create procedure 存储过程名 \G 推荐使用

在这里插入图片描述
在这里插入图片描述

可以看出两句语句的执行区别!


四、删除存储过程

drop procedure 存储过程名;

drop procedure if exists 存储过程名; 当存在存储过程时,才进行删除!

推荐使用第二种方式!

例:

drop procedure proce_if;

drop procedure if exists proc_test_if;

在这里插入图片描述


五、总结

存储过程重在理解,实际开发中,一般都是高级程序员进行使用,并且也很少使用。上述也都是一般简单的用法,如果后期需要使用,再进行琢磨,相信也可以写出来!

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

cpp_learners

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值