mysql 变量赋值要注意的

本文分享了一次MySQL存储过程的编写经历,重点介绍了如何使用循环进行字符串拼接,并强调了变量初始化的重要性。
今天由于项目需要,需要写个存储过程,这个可是一年才难得写一次。于是没办法,重新捡起来。开始写
写到后来。。

CREATE FUNCTION `getChildLstnotSun`(department_id int)
RETURNS varchar(1000)
BEGIN
DECLARE sTemp VARCHAR(1000);
DECLARE sTempChd int;
declare fetchSeqOk boolean;
declare cur1 CURSOR FOR SELECT departmentId FROM sys_department_info where fatherDepartmentId=department_id;
DECLARE CONTINUE HANDLER FOR NOT FOUND SET fetchSeqOk=true;
SET fetchSeqOk=false;
OPEN cur1;
fetchSeqLoop:Loop
FETCH cur1 INTO sTempChd;
if fetchSeqOk then
leave fetchSeqLoop;
else
SET sTemp := concat(sTemp,',',sTempChd);
end if;
end loop;
CLOSE cur1;
RETURN sTemp;
END

需要有个类似于for循环字符串拼接的代码


OPEN cur1;
fetchSeqLoop:Loop
FETCH cur1 INTO sTempChd;
if fetchSeqOk then
leave fetchSeqLoop;
else
SET sTemp := concat(sTemp,',',sTempChd);
end if;
end loop;
CLOSE cur1;


结果调试了半天,这个sTemp变量就是不出来.

最后开始奇思妙想。
结果在 SET fetchSeqOk=false;后面加上了 set sTemp='';
这时候才出来了。尼玛,原来这个是需要初始化一下的


顺便记一下,mysql的group_concat函数最好只用在字符串字段上
### MySQL变量赋值的方式 在 MySQL 中,可以通过多种方式实现变量赋值操作。以下是几种常见的方法及其具体应用: #### 方法一:通过 `SET` 命令显式赋值 这是最常见的变量赋值方式之一。可以使用 `SET` 关键字为用户定义的变量分配具体的值。 ```sql SET @variable_name = value; -- 或者 SET @variable_name := value; ``` 例如: ```sql SET @my_variable = 100; -- 赋整数值 SET @my_string_var := 'Hello, World!'; -- 赋字符串值 ``` 这种方法适用于简单的场景下直接设置变量值[^1]。 --- #### 方法二:通过 `SELECT ... INTO` 将查询结果赋值变量 如果需要将查询的结果存储到变量中,则可以使用 `SELECT ... INTO` 的形式。这种方式要求返回的数据行数必须匹配目标变量的数量,并且通常只允许单行数据作为输入源。 语法如下: ```sql SELECT column_list INTO variable_list FROM table_expression; ``` 实例演示: 假设有一个名为 `employees` 的表,其中包含员工编号 (`id`) 和工资 (`salary`) 字段。现在希望获取第一个记录中的薪水并将其存入一个会话级变量当中。 ```sql SELECT salary INTO @first_employee_salary FROM employees LIMIT 1; ``` 需要注意的是当存在多条符合条件的数据时应考虑加入适当限制条件以免引发错误提示关于过多结果集的情况处理说明可参见相关内容描述[^2]. --- #### 方法三:利用表达式的计算结果动态设定变量 除了静态指定外还可以基于某些逻辑运算得出最终结论再赋予相应名称下的容器对象之中去完成初始化过程. 例子展示: ```sql SET @total_amount = (SELECT SUM(amount) FROM transactions); ``` 这里我们把交易总额算出来之后保存到了全局作用范围内的参数里头去了以便后续调用的时候可以直接拿来使用而无需重复执行相同的汇总动作多次从而提高效率减少资源消耗等问题发生几率.[^4] 另外值得注意的一点就是对于事务隔离级别等相关配置项同样支持类似的机制来进行调整控制工作比如说下面这个案例就很好地诠释了这一点原理: ```sql SET GLOBAL transaction_read_only=ON; ``` 此命令将会改变整个服务器级别的默认行为模式使之进入只读状态直到下次重启服务或者重新修改回来为止效果才会消失不见踪影哦~[^3]
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值