REPEAT 语句
适用于 ❌ 开源版 ✅ Express 版 ✅ 专业版 ✅ 企业版
WHILE不太为人所知的兄弟是 REPEAT,它的工作方式与 Java 的 do 语句相同。它通常不如 WHILE 有用,但有时当循环必须至少迭代一次时,它可能会有用。
一个例子
-- MySQL syntax REPEAT INSERT INTO t (col) VALUES (i); SET i = i + 1; UNTIL i > 10 END REPEAT;
// All dialects
Variable<Integer> i = var("i", INTEGER);
repeat(
insertInto(T).columns(T.COL).values(i),
i.set(i.plus(1))
).until(i.gt(10))
方言支持
此示例使用 jOOQ
repeat(deleteFrom(BOOK).where(BOOK.ID.eq(i)), i.set(i.plus(1))).until(i.gt(10))
翻译成以下特定方言的表达式
Aurora Postgres, CockroachDB, Oracle, Postgres, YugabyteDB
<<alias_2>> LOOP DELETE FROM BOOK WHERE BOOK.ID = i; i := (i + 1); EXIT alias_2 WHEN i > 10; END LOOP
BigQuery, DB2, HSQLDB, MariaDB, MySQL, Trino
REPEAT DELETE FROM BOOK WHERE BOOK.ID = i; SET i = (i + 1); UNTIL i > 10 END REPEAT
Exasol
REPEAT DELETE FROM BOOK WHERE BOOK.ID = i; i := (i + 1); UNTIL i > 10 END REPEAT
Firebird
alias_2:
WHILE (1 = 1) DO BEGIN
DELETE FROM BOOK
WHERE BOOK.ID = :i;
:i = (:i + 1);
IF (:i > 10) THEN
LEAVE alias_2;
END
H2
do {
try (PreparedStatement s = c.prepareStatement(
"DELETE FROM BOOK\n" +
"WHERE BOOK.ID = ?"
)) {
s.setObject(1, i);
s.execute();
}
i = (i + 1);
}
while (!(i > 10))
Hana
WHILE 1 = 1 DO
DELETE FROM BOOK
WHERE BOOK.ID = i;
i = (i + 1);
IF i > 10 THEN
BREAK;
END IF;
END WHILE
Informix
<<alias_2>> LOOP DELETE FROM BOOK WHERE BOOK.ID = i; LET i = (i + 1); EXIT alias_2 WHEN i > 10; END LOOP
Snowflake
REPEAT DELETE FROM BOOK WHERE BOOK.ID = :i; i := (:i + 1); UNTIL (:i > 10) END REPEAT
ASE, Access, Aurora MySQL, ClickHouse, Databricks, Derby, DuckDB, MemSQL, Redshift, SQLDataWarehouse, SQLServer, SQLite, Sybase, Teradata, Vertica
/* UNSUPPORTED */
使用 jOOQ 3.21 生成。早期 jOOQ 版本的支持可能有所不同。 在我们的网站上翻译您自己的 SQL
反馈
您对此页面有任何反馈吗? 我们很乐意听取您的意见!