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

SQL 数据访问特性

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

一些方言需要显式指定函数的几个特性,定义函数允许(和期望)拥有哪些类型的内容。这些特性既充当开发的契约(类似于 java.lang.FunctionalInterface 注解),也向数据库提示函数是否预期具有副作用(因此可能无法在 SELECT 语句 中使用),或者它是否依赖于数据,或者是否是纯粹确定性的(另请参见 DETERMINISTIC 特性)。 SQL 数据访问特性包括

  • NO SQL(无 SQL)
  • CONTAINS SQL(包含 SQL)
  • READS SQL DATA(读取 SQL 数据)
  • MODIFIES SQL DATA(修改 SQL 数据)

虽然语义看起来很清晰,但请参阅您的数据库手册以了解详细信息,因为可能存在细微的差异,例如,关于哪些特定的 过程语句 构成 "SQL"。

如果您的方言不支持某个特性,您仍然可以指定它,jOOQ 将简单地在生成的 SQL 中忽略它。

create.createFunction("f1").returns(INTEGER).noSQL().as(return_(1)).execute();
create.createFunction("f2").returns(INTEGER).containsSQL().as(return_(select(val(1)))).execute();
create.createFunction("f3").returns(INTEGER).readsSQLData().as(return_(selectCount().from(BOOK))).execute();
create.createFunction("f4").returns(INTEGER).modifiesSQLData().as(
  insertInto(LOGS).columns(LOGS.TEXT).values("Function F4 was called"),
  return_(1)
).execute();

这与 过程的 SQL 数据访问特性 工作方式相同

反馈

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

The jOOQ Logo