SET @idx = 1; SET @len = LENGTH(temp_accintervals) - LENGTH(REPLACE(temp_accintervals, ',', '')) + 1; WHILE @idx <= @len DO SET accinterval1 = TRIM(SUBSTRING_INDEX(SUBSTRING_INDEX(temp_accintervals, ',', @idx), ',', -1)); SELECT accinterval1; SELECT count(1) INTO records FROM t_ams_recordother t WHERE t.archivesym = accinterval1 AND FONDSCODE = '2110000' AND bookid = 0 and classno in ('银行余额调节表','银行对账单'); SELECT records; IF records = 0 THEN SELECT concat(accinterval1,' - 未查询到需要组卷的数据'); SET @idx = @idx + 1; CONTINUE WHILE; END IF; SET @idx = @idx + 1; END WHILE;
时间: 2024-04-29 17:19:31 浏览: 41
这是一个 MySQL 存储过程,它的作用是从 `temp_accintervals` 字符串中提取出多个子字符串,并根据每个子字符串查询数据库表 `t_ams_recordother`,如果查询结果为空,则输出一条提示信息。下面是这段代码的具体解释:
1. `SET @idx = 1; SET @len = LENGTH(temp_accintervals) - LENGTH(REPLACE(temp_accintervals, ',', '')) + 1;`
这两行代码分别初始化循环计数器 `@idx` 和计算 `temp_accintervals` 字符串中子字符串的个数 `@len`。这里使用了 REPLACE 函数和 LENGTH 函数来计算子字符串的个数。
2. `WHILE @idx <= @len DO`
这是一个 WHILE 循环,循环条件是 `@idx` 小于等于 `@len`。
3. `SET accinterval1 = TRIM(SUBSTRING_INDEX(SUBSTRING_INDEX(temp_accintervals, ',', @idx), ',', -1));`
这行代码使用 SUBSTRING_INDEX 函数和 TRIM 函数从 `temp_accintervals` 字符串中提取出第 `@idx` 个子字符串,并将其存储到变量 `accinterval1` 中。
4. `SELECT count(1) INTO records FROM t_ams_recordother t WHERE t.archivesym = accinterval1 AND FONDSCODE = '2110000' AND bookid = 0 and classno in ('银行余额调节表','银行对账单');`
这行代码查询数据库表 `t_ams_recordother`,并将查询结果存储到变量 `records` 中。查询条件为 `archivesym = accinterval1 AND FONDSCODE = '2110000' AND bookid = 0 and classno in ('银行余额调节表','银行对账单')`。
5. `IF records = 0 THEN`
如果查询结果为空,则执行下面的代码。
6. `SELECT concat(accinterval1,' - 未查询到需要组卷的数据');`
输出一条提示信息,提示信息的内容为 `accinterval1 - 未查询到需要组卷的数据`。
7. `SET @idx = @idx + 1; CONTINUE WHILE;`
将循环计数器 `@idx` 加 1,然后跳过当前循环,继续下一次循环。
最后,当 WHILE 循环结束后,存储过程也就结束了。
阅读全文