SQL 过程中的 LOOP 语句

LOOP 语句是特殊类型的循环语句,因为它没有终止条件子句。

它会定义重复执行的一系列语句直到另一块逻辑(通常是控制转移语句)强制控制流跳至循环外部某点。

LOOP 语句通常与下列其中一个语句配合使用:LEAVE、GOTO、ITERATE 或 RETURN。 这些语句可强制控制权跳至 SQL 过程中紧跟循环之后的指定位置、跳至循环的开头以开始另一次循环迭代或退出 SQL 过程。 为指示使用这些语句时要将控制流传递至的位置,使用了标签。

当循环中有复杂逻辑(您可能需要用它来以多种方式退出)时,LOOP 语句很有用,但使用时应该十分谨慎以避免出现无限循环。

如果在没有控制转移语句的情况下单独使用 LOOP 语句,那么循环中包括的一系列语句将无限执行或者直到某个数据库条件发生(该条件引发强制控制流更改的条件处理程序)或不受控制的条件发生(该条件强制 SQL 过程返回)。

以下是包含 LOOP 语句的 SQL 过程的示例。 它还会使用 ITERATE 和 LEAVE 语句。

  CREATE  PROCEDURE ITERATOR()
  LANGUAGE SQL
  BEGIN
    DECLARE v_deptno CHAR(3); DECLARE v_deptname VARCHAR(29); 
    DECLARE at_end INTEGER DEFAULT 0;
    DECLARE not_found CONDITION FOR SQLSTATE '02000';

    DECLARE c1 CURSOR FOR SELECT deptno, deptname  
                          FROM department ORDER BY deptno;
    DECLARE CONTINUE HANDLER FOR not_found SET at_end = 1;
    OPEN c1;
  
    ins_loop: LOOP

      FETCH c1 INTO v_deptno, v_deptname; 

      IF at_end = 1 THEN
        LEAVE ins_loop;
      ELSEIF v_dept = 'D11' THEN
        ITERATE ins_loop;
      END  IF;

      INSERT  INTO department (deptno, deptname) 
        VALUES ('NEW', v_deptname);
    
    END LOOP;
  
    CLOSE c1;
  END