“游标(Cursor)”在不同场景里含义略有不同,常见的有以下几种情况。你没说明具体环境,我把最常见的几种都列出来,你可以对号入座。
DELIMITER $$
CREATE PROCEDURE test_cursor()
BEGIN
DECLARE done INT DEFAULT FALSE;
DECLARE v_id INT;
DECLARE v_name VARCHAR(50);
-- 定义游标
DECLARE cur CURSOR FOR
SELECT id, name FROM user;
-- 异常处理(遍历结束)
DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = TRUE;
OPEN cur;
read_loop: LOOP
FETCH cur INTO v_id, v_name;
IF done THEN
LEAVE read_loop;
END IF;
-- 处理数据
SELECT v_id, v_name;
END LOOP;
CLOSE cur;
END$$
DELIMITER ;
✅ 核心步骤:
DECLARE CURSOROPENFETCHCLOSEDECLARE cur CURSOR FOR
SELECT id, name FROM user;
OPEN cur;
FETCH NEXT FROM cur INTO @id, @name;
WHILE @@FETCH_STATUS = 0
BEGIN
PRINT @name;
FETCH NEXT FROM cur INTO @id, @name;
END
CLOSE cur;
DEALLOCATE cur;
DECLARE
CURSOR cur IS SELECT id, name FROM user;
v_id user.id%TYPE;
v_name user.name%TYPE;
BEGIN
OPEN cur;
LOOP
FETCH cur INTO v_id, v_name;
EXIT WHEN cur%NOTFOUND;
DBMS_OUTPUT.PUT_LINE(v_name);
END LOOP;
CLOSE cur;
END;
cursor.execute("SELECT id, name FROM user")
for row in cursor.fetchall():
print(row)
或逐行:
for row in cursor:
print(row)
Cursor cursor = db.rawQuery("SELECT * FROM user", null);
while (cursor.moveToNext()) {
String name = cursor.getString(
cursor.getColumnIndex("name")
);
}
cursor.close();
⚠️ 数据库里能用 SQL 解决的,不要用游标
原因:
我可以直接给你可复制用的示例。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。