GOTO 语句
适用于 ❌ 开源版 ✅ Express 版 ✅ 专业版 ✅ 企业版
嘿,我们不评判任何人。 您有使用此语句的理由。
在前一节中,我们介绍了 标签。 现在我们使用它们。 例如,有条件地跳过一组语句。 或者为了简化示例,无条件地跳过它们
-- PL/SQL BEGIN INSERT INTO t (col) VALUES (1); GOTO l1; INSERT INTO t (col) VALUES (2); <<l1>> INSERT INTO t (col) VALUES (3); END;
// All dialects Label l1 = label("l1"); begin( insertInto(T).columns(T.COL).values(1), goto_(l1), insertInto(T).columns(T.COL).values(2), l1.label(insertInto(T).columns(T.COL).values(3)) )
某些方言(例如 T-SQL)可能会以通常对代码的可读性或可维护性没有真正帮助的方式实现“完整 GOTO”,即 GOTO
可用于跳转到任何任意范围,这些范围不应通过普通控制流访问。 这在其他语言(如 PL/SQL)中是不可能的,并且目前 jOOQ 无法模拟。
请注意,goto
是 Java 语言中的保留关键字,因此 jOOQ API 无法将其用作方法名称。 我们在这些冲突后添加了一个下划线:goto_()
。
方言支持
此示例使用 jOOQ
begin(l.label(insertInto(BOOK).columns(BOOK.ID).values(1)), goto_(l))
翻译成以下特定方言的表达式
DB2
BEGIN l: INSERT INTO BOOK (ID) VALUES (1); GOTO l; END
Informix, Oracle
BEGIN <<l>> INSERT INTO BOOK (ID) VALUES (1); GOTO l; END;
SQLDataWarehouse, SQLServer
BEGIN l: INSERT INTO BOOK (ID) VALUES (1); GOTO l; END;
ASE, Access, Aurora MySQL, Aurora Postgres, BigQuery, ClickHouse, CockroachDB, Databricks, Derby, DuckDB, Exasol, Firebird, H2, HSQLDB, Hana, MariaDB, MemSQL, MySQL, Postgres, Redshift, SQLite, Snowflake, Sybase, Teradata, Trino, Vertica, YugabyteDB
/* UNSUPPORTED */
使用 jOOQ 3.21 生成。早期 jOOQ 版本的支持可能有所不同。 在我们的网站上翻译您自己的 SQL
反馈
您对此页面有任何反馈吗? 我们很乐意听取您的意见!