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)) ))
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
反馈
您对此页面有任何反馈吗? 我们很乐意听取您的意见!