EXIT 语句
适用于 ❌ 开源版 ✅ Express 版 ✅ 专业版 ✅ 企业版
一种比通过 GOTO 跳转到标签更安全的方式是使用 EXIT(跳出 LOOP 或 块或其他语句)或 CONTINUE(跳过 LOOP 迭代)。
例如,在缺少更复杂的 LOOP 语法的情况下,您可以选择使用 EXIT 退出循环(在某些方言中,这会转换为 LEAVE 或 BREAK,并且工作方式与 Java 的 break 相同)
没有标签
-- PL/SQL LOOP i := i + 1; EXIT WHEN i > 10; END LOOP;
// All dialects loop( i.set(i.plus(1)), exitWhen(i.gt(10)) )
带有标签
-- PL/SQL <<label>> LOOP i := i + 1; EXIT label WHEN i > 10; END LOOP;
// All dialects
Label label = label("label");
label.label(loop(
i.set(i.plus(1)),
exit(label).when(i.gt(10))
))
方言支持
此示例使用 jOOQ
loop(i.set(i.plus(1)), exitWhen(i.gt(10)))
翻译成以下特定方言的表达式
Aurora Postgres, CockroachDB, Oracle, Postgres, YugabyteDB
LOOP i := (i + 1); EXIT WHEN i > 10; END LOOP
BigQuery
LOOP
SET i = (i + 1);
IF i > 10 THEN
BREAK;
END IF;
END LOOP
DB2, HSQLDB, MariaDB, MySQL, Trino
alias_1:
LOOP
SET i = (i + 1);
IF i > 10 THEN
LEAVE alias_1;
END IF;
END LOOP
Firebird
WHILE (1 = 1) DO BEGIN
:i = (:i + 1);
IF (:i > 10) THEN
LEAVE;
END
H2
for (;;) {
i = (i + 1);
if (i > 10) {
break;
}
}
Hana
WHILE 1 = 1 DO
i = (i + 1);
IF i > 10 THEN
BREAK;
END IF;
END WHILE
Informix
LOOP LET i = (i + 1); EXIT WHEN i > 10; END LOOP
Snowflake
LOOP
i := (:i + 1);
IF (:i > 10) THEN
BREAK;
END IF;
END LOOP
SQLDataWarehouse, SQLServer
WHILE 1 = 1 BEGIN
SET @i = (@i + 1);
IF @i > 10
BREAK;
END
ASE, Access, Aurora MySQL, ClickHouse, Databricks, Derby, DuckDB, Exasol, MemSQL, Redshift, SQLite, Sybase, Teradata, Vertica
/* UNSUPPORTED */
使用 jOOQ 3.21 生成。早期 jOOQ 版本的支持可能有所不同。 在我们的网站上翻译您自己的 SQL
反馈
您对此页面有任何反馈吗? 我们很乐意倾听!