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 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; continue一直在报错
时间: 2024-04-29 22:19:29 浏览: 141
这段代码是 SQL 代码,用于在数据库中进行查询和处理数据。其中,SET 语句用于给变量赋值,WHILE 语句用于循环操作,SELECT 语句用于查询数据,IF 语句用于条件判断,CONTINUE WHILE 语句用于跳过当前循环。根据你提供的信息,"continue一直在报错"这个问题比较模糊,需要你提供更多的错误信息或者上下文才能够帮你解决问题。
相关问题
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;
这是一个 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 循环结束后,存储过程也就结束了。
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;
根据你提供的代码,使用 `CONTINUE` 时需要在 `WHILE` 后面加上循环名称,以便让 `CONTINUE` 跳过指定的循环,所以你需要将 `CONTINUE` 语句中的 `while` 改成循环的名称,例如:
```
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;
```
在上述代码中,`CONTINUE` 语句中的 `while` 被改成了 `WHILE` 循环的名称,以便让 `CONTINUE` 跳过指定的循环。
阅读全文