温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

Cursor游标如何声明

发布时间:2026-08-31 18:33:46 来源:亿速云 阅读:84 作者:小樊 栏目:数据库

“Cursor游标”通常指数据库中的游标(Cursor),不同数据库(如 MySQL、Oracle、SQL Server、PostgreSQL)的声明语法略有差异。下面按常见数据库分别说明:


一、Oracle 中游标声明(最典型)

1. 显式游标声明

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;

2. 带参数的游标

CURSOR cur_emp(p_dept_id NUMBER) IS
  SELECT id, name FROM employee WHERE dept_id = p_dept_id;

二、MySQL 中游标声明

⚠️ 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 ;

三、SQL Server 中游标声明

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;

四、PostgreSQL 中游标声明

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;

五、通用游标使用步骤

  1. 声明游标(DECLARE CURSOR)
  2. 打开游标(OPEN)
  3. 抓取数据(FETCH)
  4. 处理数据
  5. 关闭游标(CLOSE)

如果你指的是:

  • 编程语言中的 Cursor(如 Python、JDBC)
  • MongoDB 游标
  • 前端/分页游标(Cursor Pagination)

可以告诉我具体场景,我可以给你对应示例。

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI