提交 a5049ff0 编写于 作者: 彭世瑜's avatar 彭世瑜

fix

上级 96833e41
...@@ -284,4 +284,69 @@ drop function my_func1; ...@@ -284,4 +284,69 @@ drop function my_func1;
select 字段 into @变量; select 字段 into @变量;
``` ```
https://www.bilibili.com/video/BV1Vx411g7uJ?p=70&spm_id_from=pageDriver ## 3、函数流程结构案例
需求:
从1开始,直到用户传入的对应的值位置,自动求和,凡是5的倍数都不要
设计:
1. 创建函数
2. 需要一个形参,确定要累加到什么位置
3. 需要定义一个变量来保存对应的结果
4. 内容部需要一个循环来实现迭代累加
5. 循环内部需要进行条件判断控制,5的倍数
定义函数
```sql
-- 创建一个自动求和的函数
-- 修改语句结束符
delimiter $$
-- 创建函数
create function my_sum(end_value int) returns int
begin
-- 声明局部变量
declare res int default 0;
declare i int default 0;
-- 循环处理
mywhile: while i <= end_value do
-- mysql中没有++
set i = i + 1;
-- 判断当前数据是否合理
if i % 5 = 0 then
iterate mywhile;
end if;
-- 修改变量,累加
set res = res + i;
end while;
-- 返回值
return res;
end
-- 结束
$$
-- 修改语句结束符
delimiter ;
```
调用函数
```sql
-- 实参个数必须等于形参个数
select my_sum(10);
```
https://www.bilibili.com/video/BV1Vx411g7uJ?p=72&spm_id_from=pageDriver
\ No newline at end of file
...@@ -134,3 +134,60 @@ mysql> select @name, @age; ...@@ -134,3 +134,60 @@ mysql> select @name, @age;
```sql ```sql
declare 变量名 数据类型 [属性]; declare 变量名 数据类型 [属性];
``` ```
## 4、变量作用域
变量能够使用的区域范围
### 4.1、局部作用域
declare 关键字声明 (结构体中使用:函数/存储过程/触发器)
declare关键字声明的变量没有任何符号修饰,就是普通字符串,如果再外部访问该变量,系统会自动认为是字段
### 4.2、会话作用域
用户定义的,使用@符号定义的变量,使用set关键字
会话作用域,当次连接有效只要再本连接中,任何地方都可以使用(可以在结构内容,也可以跨库)
会话变量可以再函数内部使用
```sql
set @name = '张三';
create function get_name() returns char(4)
return @name;
select get_name();
+------------+
| get_name() |
+------------+
| 张三 |
+------------+
```
会话变量可以跨库
```sql
use mydatabase2;
mysql> select @name;
+--------+
| @name |
+--------+
| 张三 |
+--------+
```
### 4.3、全局作用域
所有的客户端,所有的连接都有效,需要使用全局符号来定义
```sql
set global 变量名 = 值;
set @@global.变量名 = ;
```
通常,在sql编程的时候,不会使用自定义变量来控制全局,一般定义会话变量或者结构中使用局部变量来解决问题
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册