数据库实验九存储过程(新)使用游标的存储过程
时间: 2025-01-02 07:42:52 浏览: 12
### MySQL存储过程中的游标使用示例
在MySQL中创建带有游标的存储过程可以帮助实现更复杂的逻辑处理,特别是当需要逐行读取查询结果并进行相应操作时。下面是一个简单的例子,展示如何在一个存储过程中定义和使用游标。
#### 创建表与插入测试数据
首先准备一张学生信息表`t_student`用于演示:
```sql
CREATE TABLE IF NOT EXISTS t_student (
id INT AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(50),
phonenumber CHAR(11)
);
INSERT INTO t_student (name, phonenumber) VALUES ('Alice', '12345678901'), ('Bob', '23456789012');
```
#### 定义带游标的存储过程
接下来编写一个名为`process_students`的存储过程,在其中声明游标遍历所有学生的记录,并打印他们的名字和电话号码[^1]。
```sql
DELIMITER $$
CREATE PROCEDURE process_students()
BEGIN
DECLARE done BOOLEAN DEFAULT FALSE;
DECLARE student_name VARCHAR(50);
DECLARE phone_number CHAR(11);
-- 声明游标
DECLARE cur1 CURSOR FOR SELECT name, phonenumber FROM t_student;
-- 当FETCH语句尝试获取超过最后一行时设置done=TRUE
DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = TRUE;
OPEN cur1;
read_loop: LOOP
FETCH cur1 INTO student_name, phone_number;
IF done THEN
LEAVE read_loop;
END IF;
-- 这里可以加入具体业务逻辑,比如更新其他表格或者计算统计值等
SELECT CONCAT('Processing ', student_name, ': ', phone_number);
END LOOP;
CLOSE cur1;
END$$
DELIMITER ;
```
此段代码展示了完整的流程:从打开游标到关闭游标之间的每一步都清晰可见。通过这种方式可以在不返回客户端的情况下高效地处理大量数据[^2]。
阅读全文