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

SQL 方言

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

尽管jOOQ尽量代表SQL标准,但许多功能都是特定于给定数据库及其“SQL方言”的。 jOOQ使用org.jooq.SQLDialect枚举类型对此进行建模。

SQL方言是配置的主要属性之一。 从DSLContext创建的查询在渲染SQL绑定绑定值时,将采用特定于方言的行为。

jOOQ API的某些部分仅由受支持的SQL方言的给定子集正式支持。 例如,Oracle CONNECT BY子句由Oracle和Informix数据库支持,并使用org.jooq.Support注解进行注解,如下所示

/**
 * Add an Oracle-specific <code>CONNECT BY</code> clause to the query
 */
@Support({ SQLDialect.INFORMIX, SQLDialect.ORACLE })
SelectConnectByConditionStep<R> connectBy(Condition condition);

未用org.jooq.Support注解进行注解的jOOQ API方法,或者使用Support注解进行了注解,但没有任何SQL方言的jOOQ API方法,可以在所有SQL方言中安全使用。 这方面的一个例子是SELECT语句工厂方法

/**
 * Create a new DSL select statement.
 */
@Support
SelectSelectStep<R> select(Field<?>... fields);

jOOQ的SQL子句模拟功能

上述Support注解不仅指定哪些数据库本机支持某个功能。 它还指示jOOQ为某些缺少此功能的数据库模拟该功能。 这方面的一个例子是DISTINCT谓词,这是由SQL:1999定义的谓词语法,仅由H2、HSQLDB和Postgres实现

A IS DISTINCT FROM B

然而,jOOQ在所有方言中都支持IS DISTINCT FROM谓词,因为它的语义可以用等效的CASE表达式来表达。 更多详细信息,请参见手册中关于DISTINCT谓词的部分。

jOOQ和Oracle SQL方言

Oracle SQL比许多其他SQL方言更具表现力。 它具有许多SQL标准范围之外的独特关键字、子句和函数。 以下是一些例子

jOOQ与Oracle的SQL扩展有着历史渊源。 如果Oracle SQL中支持某些功能,则它很有可能进入jOOQ API

反馈

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

The jOOQ Logo