10 一个很少的学习存储过程和函数的博客:
https://www.cnblogs.com/Honeycomb/p/10672659.html
11继续上一个博客,关于函数部分
mysql> delimiter //
mysql> CREATE FUNCTION hello (s CHAR(20))
-> RETURNS CHAR(50) -- 返回类型定义
-> RETURN CONCAT('Hello, ',s,'!'); -- 实际返回内容
-> //
Query OK, 0 rows affected (0.01 sec)
mysql> delimiter ;
mysql> select hello('a');
+------------+
| hello('a') |
+------------+
| Hello, a! |
+------------+
mysql> select hello(id) from users;
+--------------+
| hello(id) |
+--------------+
| Hello, 1! |
| Hello, 3! |
以上就是一个简单的函数的使用,它的作用就像mysql中定义的一个工具类方法
不管是存储过程还是函数的定义,使用上的区别:
1 规范来看,核心代码都要加上 begin ...end
2 在调用上: call test_proc(); select test_func();
3 在传参上,存储过程是可以有入参有回参 函数是一定要定义回参,这也是它的意义所在
从这里也可以看出,他俩的最大不同,
存储过程,重在过程,在过程中实现自身价值
函数:就重在通过某种模块化的方式,去做一件事请
12 关于如何将值进行设置:
select a,b into _a,_b from user where id=_id; -- 如果只有一条数据返回的话,这样赋值是ok的
如果返回多条的话,就要用到cursor 游标,去做循环遍历了,使用fetch … into vv
13 关于循环:
1 repeat
2 while 它和repeat 很像,只看第一次遍历要不要判断条件
3 loop 有一个label, leave是跳出循环,iterate是继续下一次循环,对比java的 break和continue;
4 关于declare有自己的要求:
Declare语句通常用来声明本地变量、游标、条件或者handler
Declare语句只允许出现在begin … end语句中而且必须出现在第一行
Declare的顺序也有要求,通常是先声明本地变量,再是游标,然后是条件和handler
5 提醒!!!在定义变量时,小心犯错:
1使用关键字
2 参数名定义成和字段名一模一样的了 错!