温馨提示×

温馨提示×

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

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

存储过程怎么写循环

发布时间:2026-09-03 05:47:35 来源:亿速云 阅读:90 作者:小樊 栏目:数据库

下面以常见数据库为例,给你讲一下存储过程里怎么写循环,并附上示例代码。


一、MySQL 存储过程循环

1️⃣ WHILE 循环

DELIMITER $$

CREATE PROCEDURE test_while()
BEGIN
    DECLARE i INT DEFAULT 1;

    WHILE i <= 10 DO
        SELECT i;
        SET i = i + 1;
    END WHILE;
END$$

DELIMITER ;

2️⃣ REPEAT 循环(至少执行一次)

DELIMITER $$

CREATE PROCEDURE test_repeat()
BEGIN
    DECLARE i INT DEFAULT 1;

    REPEAT
        SELECT i;
        SET i = i + 1;
    UNTIL i > 10
    END REPEAT;
END$$

DELIMITER ;

3️⃣ LOOP + LEAVE(类似 break)

DELIMITER $$

CREATE PROCEDURE test_loop()
BEGIN
    DECLARE i INT DEFAULT 1;

    my_loop: LOOP
        IF i > 10 THEN
            LEAVE my_loop;
        END IF;

        SELECT i;
        SET i = i + 1;
    END LOOP;
END$$

DELIMITER ;

二、SQL Server 存储过程循环

WHILE 循环

CREATE PROCEDURE test_while
AS
BEGIN
    DECLARE @i INT = 1;

    WHILE @i <= 10
    BEGIN
        PRINT @i;
        SET @i = @i + 1;
    END
END

三、Oracle 存储过程循环

1️⃣ LOOP

CREATE OR REPLACE PROCEDURE test_loop IS
    i NUMBER := 1;
BEGIN
    LOOP
        EXIT WHEN i > 10;
        DBMS_OUTPUT.PUT_LINE(i);
        i := i + 1;
    END LOOP;
END;

2️⃣ FOR 循环(最常用)

CREATE OR REPLACE PROCEDURE test_for IS
BEGIN
    FOR i IN 1..10 LOOP
        DBMS_OUTPUT.PUT_LINE(i);
    END LOOP;
END;

四、循环遍历表数据(常见需求)

MySQL 示例

DECLARE done INT DEFAULT FALSE;
DECLARE name VARCHAR(50);
DECLARE cur CURSOR FOR SELECT user_name FROM user;
DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = TRUE;

OPEN cur;
read_loop: LOOP
    FETCH cur INTO name;
    IF done THEN
        LEAVE read_loop;
    END IF;
    -- 处理数据
END LOOP;
CLOSE cur;

五、建议

  • ✅ 简单计数 → FOR / WHILE
  • ✅ 遍历结果集 → 游标 + 循环
  • ⚠️ 能用 SQL 集合操作,就少用循环

如果你告诉我:

  • 用的什么数据库(MySQL / Oracle / SQL Server)
  • 循环目的是什么(计数 / 遍历表 / 批量更新)

我可以帮你写完全贴合业务的存储过程。

向AI问一下细节

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

AI
助
手