IF 语句
适用于 ❌ 开源版 ✅ Express 版 ✅ 专业版 ✅ 企业版
条件分支是所有语言的基本特性。过程语言支持 IF
语句。
方言中存在不同风格的 IF
语句,包括
- 对于分支体需要一个
THEN
子句,在这种情况下,对于多语句体不需要 BEGIN .. END 块。 - 允许使用专用的
ELSIF
子句来进行替代的、嵌套的分支,以避免嵌套。这主要是一个语法糖特性。
在 jOOQ 中,一个 IF
语句可能如下所示
-- PL/SQL syntax IF i = 0 THEN INSERT INTO a (col) VALUES (1); ELSIF i = 1 THEN INSERT INTO b (col) VALUES (2); ELSE INSERT INTO c (col) VALUES (3); END IF;
// All dialects if_(i.eq(0)).then( insertInto(A).columns(A.COL).values(1) ).elsif(i.eq(1)).then( insertInto(B).columns(B.COL).values(2) ).else_( insertInto(C).columns(C.COL).values(3) )
请注意,if
和 else
都是 Java 语言中的保留关键字,因此 jOOQ API 不能将它们用作方法名称。 我们在这些冲突的名称后面加上了下划线:if_()
和 else_()
。
方言支持
此示例使用 jOOQ
if_(i.eq(0)).then(deleteFrom(BOOK)).else_(deleteFrom(AUTHOR))
翻译成以下特定方言的表达式
Aurora Postgres, CockroachDB, DB2, Exasol, HSQLDB, Hana, Informix, MariaDB, MySQL, Oracle, Postgres, Trino, YugabyteDB
IF i = 0 THEN DELETE FROM BOOK; ELSE DELETE FROM AUTHOR; END IF
BigQuery
IF i = 0 THEN DELETE FROM BOOK WHERE TRUE; ELSE DELETE FROM AUTHOR WHERE TRUE; END IF
Firebird
IF (:i = 0) THEN DELETE FROM BOOK; ELSE DELETE FROM AUTHOR;
H2
if (i = 0) { try (PreparedStatement s = c.prepareStatement( "DELETE FROM BOOK" )) { s.execute(); } } else { try (PreparedStatement s = c.prepareStatement( "DELETE FROM AUTHOR" )) { s.execute(); } }
Snowflake
IF (:i = 0) THEN DELETE FROM BOOK; ELSE DELETE FROM AUTHOR; END IF
SQLDataWarehouse, SQLServer
IF @i = 0 DELETE FROM BOOK; ELSE DELETE FROM AUTHOR;
ASE, Access, Aurora MySQL, ClickHouse, Databricks, Derby, DuckDB, MemSQL, Redshift, SQLite, Sybase, Teradata, Vertica
/* UNSUPPORTED */
使用 jOOQ 3.21 生成。早期 jOOQ 版本的支持可能有所不同。 在我们的网站上翻译您自己的 SQL
反馈
您对此页面有任何反馈吗? 我们很乐意听到您的意见!