“Cursor游标”通常指数据库中的游标(Cursor),不同数据库(如 MySQL、Oracle、SQL Server、PostgreSQL)的声明语法略有差异。下面按常见数据库分别说明:
DECLARE
CURSOR cur_emp IS
SELECT id, name FROM employee WHERE dept_id = 10;
BEGIN
-- 使用游标
FOR rec IN cur_emp LOOP
DBMS_OUTPUT.PUT_LINE(rec.id || ' ' || rec.name);
END LOOP;
END;
CURSOR cur_emp(p_dept_id NUMBER) IS
SELECT id, name FROM employee WHERE dept_id = p_dept_id;
⚠️ MySQL 游标只能在存储过程或函数中使用
DELIMITER $$
CREATE PROCEDURE test_cursor()
BEGIN
DECLARE done INT DEFAULT 0;
DECLARE v_id INT;
DECLARE v_name VARCHAR(50);
-- 声明游标
DECLARE cur_emp CURSOR FOR
SELECT id, name FROM employee WHERE dept_id = 10;
-- 异常处理(游标结束)
DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = 1;
OPEN cur_emp;
read_loop: LOOP
FETCH cur_emp INTO v_id, v_name;
IF done THEN
LEAVE read_loop;
END IF;
-- 处理数据
END LOOP;
CLOSE cur_emp;
END$$
DELIMITER ;
DECLARE cur_emp CURSOR FOR
SELECT id, name FROM employee WHERE dept_id = 10;
OPEN cur_emp;
FETCH NEXT FROM cur_emp INTO @id, @name;
WHILE @@FETCH_STATUS = 0
BEGIN
-- 处理数据
FETCH NEXT FROM cur_emp INTO @id, @name;
END;
CLOSE cur_emp;
DEALLOCATE cur_emp;
DECLARE
cur_emp CURSOR FOR
SELECT id, name FROM employee WHERE dept_id = 10;
BEGIN
-- 使用
END;
或在函数中:
FOR rec IN SELECT id, name FROM employee LOOP
-- 隐式游标
END LOOP;
如果你指的是:
可以告诉我具体场景,我可以给你对应示例。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。