DELIMITER $$ DROP PROCEDURE IF EXISTS `InspectionResult`$$ CREATE PROCEDURE `xtjw`.`InspectionResult`(aSubmitCorp varCHAR(50),aYear int(10)) BEGIN DECLARE cydbazbTable VARCHAR(50); DECLARE aIndexNO varchar(50); DECLARE my_cursor CURSOR FOR SELECT aIndexNO FROM xtjw.cyd WHERE SubmitCorp=aSubmitCorp AND YEAR(DateOrder)=aYear; OPEN my_cursor; FETCH NEXT FROM my_cursor INTO aIndexNO; BEGIN select * from xtjw.cyd where IndexNO = aIndexNO; END CLOSE my_cursor; DEALLOCATE my_cursor; END$$ DELIMITER ;报错
时间: 2024-02-14 15:08:57 浏览: 118
MySQL 5.7 create VIEW or FUNCTION or PROCEDURE
在这段代码中,存在以下几个问题:
1. 在 `FETCH NEXT` 语句之后,应该使用 `WHILE` 循环来遍历游标中的结果集,而不是使用 `BEGIN ... END` 块。
2. 在 `SELECT` 语句中,使用了未声明的变量 `cydbazbTable`。
3. 在 `FETCH NEXT` 语句中,应该使用 `INTO` 子句将结果集中的数据存储到变量中。
以下是修改后的代码:
```
DELIMITER $$
DROP PROCEDURE IF EXISTS `InspectionResult`$$
CREATE PROCEDURE `xtjw`.`InspectionResult`(aSubmitCorp VARCHAR(50), aYear INT(10))
BEGIN
DECLARE aIndexNO VARCHAR(50);
DECLARE my_cursor CURSOR FOR
SELECT aIndexNO FROM xtjw.cyd WHERE SubmitCorp = aSubmitCorp AND YEAR(DateOrder) = aYear;
OPEN my_cursor;
FETCH NEXT FROM my_cursor INTO aIndexNO;
WHILE @@FETCH_STATUS = 0
DO
SELECT * FROM xtjw.cyd WHERE IndexNO = aIndexNO;
FETCH NEXT FROM my_cursor INTO aIndexNO;
END WHILE;
CLOSE my_cursor;
DEALLOCATE my_cursor;
END$$
DELIMITER ;
```
在上面的代码中,我们将 `cydbazbTable` 变量移除,并将需要查询的 `IndexNO` 值存储到 `aIndexNO` 变量中。然后,我们使用 `WHILE` 循环来遍历游标中的结果集,并在循环体中使用 `SELECT` 语句来查询需要的数据。最后,我们需要使用 `CLOSE` 和 `DEALLOCATE` 语句来关闭游标并释放其占用的资源。
阅读全文