阅读本文前请先确保看过下边的文章:
创建存储过程
和都属于,都是对某些语句的一个封装。侧重于执行这些语句并返回一个值,而更侧重于单纯的去执行这些语句。先看一下的定义语句:
与最直观的不同点就是,的定义不需要声明。为了更直观的理解,我们先定义一个看看:
我们建立了一个名叫的存储过程,它接收两个参数,一个是类型的,一个是类型的。这个存储过程做了3件事儿,一件是查询一下表中的数据,第二件是根据接收的参数来向表中插入一条语句,第三件是再次查询一下表中的数据。
存储过程的调用
执行语句并返回一个值,所以常用在表达式中。偏向于调用那些语句,并不能用在表达式中,我们需要显式的使用语句来调用一个:
比方说我们调用一下存储过程可以这么写:
从执行结果中可以看到,存储过程在执行中产生的所有结果集,全部将会被显示到客户端。
查看和删除存储过程
与类似,也有相似的查看和删除语句,我们下边只列举一下相关语句,就不举例子了。
查看当前数据库中创建的都有哪些的语句:
查看某个定义的语句:
删除的语句:
存储过程中的语句
上边在唠叨中使用到的各种语句,包括变量的使用、判断、循环结构、注释的使用都可以被用在中,这里就不再赘述了。
存储过程的参数类型
比牛逼的一点是,在定义参数的时候可以选择参数类型(注意!不是数据类型),就像是这个样子:
这个所谓的有下边3种:
这么直接描述有些生硬哈,我们一个一个来举例子仔细分析一下:
参数类型
先定义一个类型参数是的存储过程:
Query OK, 0 rows affected (0.00 sec)
mysql>delimiter ;
mysql>
这个存储过程只有一个参数,它的参数类型是,这个存储过程实际执行两个语句,第一个语句是用来读取参数的值,第二个语句是给参数赋值。我们调用一下:
我们在客户端定义了一个变量并赋值,因为它是在客户端定义的,所以需要加前缀,然后把它当作参数传给存储过程。从结果中可以看出,第一个读取语句被成功执行,虽然第二个语句没有报错,但是再存储过程执行完毕后,再次查看变量的值并没有改变,这也就是说:IN参数类型的变量只能用于读取,对类型的变量赋值是不会被调用者看到的。
另外,因为对于参数类型是的参数,我们只是想在存储函数执行中使用它,并不需要把执行结果存储到它里边,所以除了让变量作为函数参数,常量也是可以的,比如这样:
领取专属 10元无门槛券
私享最新 技术干货