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

WHILE 语句

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

最常用的循环类型之一是 WHILE 语句,其过程式形式的工作方式与 Java while 语句非常相似,只是语法略有不同。

与之前的 LOOP 语句一样,过程式方言可能会或可能不会使用 LOOP 关键字来分隔循环体。出于 DSL 设计原因,jOOQ API 始终使用它。 例如,将 WHILE 循环与 变量赋值语句 结合使用

-- PL/SQL syntax
WHILE i <= 10
LOOP
  INSERT INTO t (col) VALUES (i);
END LOOP;
// All dialects
Variable<Integer> i = var("i", INTEGER);
while_(i.le(10)).loop(
  insertInto(T).columns(T.COL).values(i)
)

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

方言支持

此示例使用 jOOQ

while_(i.le(10)).loop(deleteFrom(BOOK).where(BOOK.ID.eq(i)))

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

Aurora Postgres, CockroachDB, Exasol, Informix, Oracle, Postgres, YugabyteDB

WHILE i <= 10 LOOP
  DELETE FROM BOOK
  WHERE BOOK.ID = i;
END LOOP

BigQuery, DB2, HSQLDB, Hana, MariaDB, MySQL, Trino

WHILE i <= 10 DO
  DELETE FROM BOOK
  WHERE BOOK.ID = i;
END WHILE

Firebird

WHILE (:i <= 10) DO BEGIN
  DELETE FROM BOOK
  WHERE BOOK.ID = :i;
END

H2

while (i <= 10) {
  try (PreparedStatement s = c.prepareStatement(
    "DELETE FROM BOOK\n" +
    "WHERE BOOK.ID = ?"
  )) {
    s.setObject(1, i);
    s.execute();
  }
}

Snowflake

WHILE (:i <= 10) DO
  DELETE FROM BOOK
  WHERE BOOK.ID = :i;
END WHILE

SQLDataWarehouse, SQLServer

WHILE @i <= 10 BEGIN
  DELETE FROM BOOK
  WHERE BOOK.ID = @i;
END

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

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

反馈

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

The jOOQ Logo