可用版本: Dev (3.21) | 最新 (3.20) | 3.19 | 3.18 | 3.17 | 3.16 | 3.15 | 3.14 | 3.13 | 3.12

CONTINUE 语句

适用于 ❌ 开源版   ✅ Express 版   ✅ 专业版   ✅ 企业版

相比通过 GOTO 跳转到标签,更安全的方式是使用 EXIT(跳出 LOOP或其他语句)或 CONTINUE(跳过 LOOP 迭代)。

就像 Java 的 continue 一样,CONTINUE 语句会跳过循环中当前迭代的剩余部分,并继续下一次迭代。一些方言使用 ITERATE 语句来实现此目的。

不带标签

-- PL/SQL
LOOP
  i := i + 1;
  CONTINUE WHEN i <= 10;
END LOOP;
// All dialects
loop(
  i.set(i.plus(1)),
  continueWhen(i.gt(10))
)

带标签

-- PL/SQL
<<label>>
LOOP
  i := i + 1;
  CONTINUE label WHEN i <= 10;
END LOOP;
// All dialects
Label label = label("label");
label.label(loop(
  i.set(i.plus(1)),
  continue(label).when(i.le(10))
))

请注意,continue 是 Java 语言中的保留关键字,因此 jOOQ API 无法将其用作方法名。 我们在这些冲突的名称后添加了下划线:continue_()

方言支持

此示例使用 jOOQ

loop(i.set(i.plus(1)), continueWhen(i.gt(10)))

翻译成以下特定方言的表达式

Aurora Postgres, CockroachDB, Oracle, Postgres, YugabyteDB

LOOP
  i := (i + 1);
  CONTINUE WHEN i > 10;
END LOOP

BigQuery

LOOP
  SET i = (i + 1);
  IF i > 10 THEN
    CONTINUE;
  END IF;
END LOOP

DB2, HSQLDB, MariaDB, MySQL, Trino

alias_1:
LOOP
  SET i = (i + 1);
  IF i > 10 THEN
    ITERATE alias_1;
  END IF;
END LOOP

H2

for (;;) {
  i = (i + 1);
  if (i > 10) {
    continue;
  }
}

Hana

WHILE 1 = 1 DO
  i = (i + 1);
  IF i > 10 THEN
    CONTINUE;
  END IF;
END WHILE

Informix

LOOP
  LET i = (i + 1);
  IF i > 10 THEN
    CONTINUE;
  END IF;
END LOOP

Snowflake

LOOP
  i := (:i + 1);
  IF (:i > 10) THEN
    CONTINUE;
  END IF;
END LOOP

SQLDataWarehouse, SQLServer

WHILE 1 = 1 BEGIN
  SET @i = (@i + 1);
  IF @i > 10
    CONTINUE;
END

ASE, Access, Aurora MySQL, ClickHouse, Databricks, Derby, DuckDB, Exasol, Firebird, MemSQL, Redshift, SQLite, Sybase, Teradata, Vertica

/* UNSUPPORTED */
使用 jOOQ 3.21 生成。早期 jOOQ 版本的支持可能有所不同。 在我们的网站上翻译您自己的 SQL

反馈

您对此页面有任何反馈吗? 我们很乐意听取您的意见!

The jOOQ Logo