SQL 过程中的 LEAVE 语句

LEAVE 语句用于将控制流转移出循环或复合语句。

以下是包含 LEAVE 语句的 SQL 过程的示例:

  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

在此示例中,LEAVE 语句用于退出使用标签 ins_loop 定义的 LOOP 语句。它嵌套在 IF 语句中,并且因此可在 IF 条件为 true 时有条件执行(游标中未发现其他行时,IF 条件变为 true)。LEAVE 语句的位置确保一旦出现 NOT FOUND 错误,不会再执行循环迭代。