在 Jooq 中创建 VIEW 语句

Posted

技术标签:

【中文标题】在 Jooq 中创建 VIEW 语句【英文标题】:Creating VIEW statement in Jooq 【发布时间】:2013-06-28 14:05:38 【问题描述】:

我正在尝试使用 Jooq 创建视图语句,我们该怎么做?

或者我们还有其他选择吗?

Jooq 版本:3.0.1

【问题讨论】:

你能再具体一点吗?你想表达一个 DDL CREATE VIEW x AS SELECT ... 语句,还是想在 jOOQ 中创建一个“视图”,即一个模拟子选择但行为像表的对象? @Lukas,我想创建视图,我想如果我只是想访问创建的视图,Jooq Generator 工具可以做到吗? 是的,生成器处理视图就像它们是表格一样......我会创建一个答案 【参考方案1】:

jOOQ 不支持创建视图。如jOOQ home page 所述:

何时不使用 jOOQ: ... 当您需要编写 DDL 语句时。 jOOQ 仅支持 DML 语句。 ...

CREATE VIEW 是 DDL,而不是 DML。

【讨论】:

这是真的,尽管最近在 jOOQ User Group 上对 CREATE VIEW 语句使用 jOOQ 提出了挑战。如果您在 jOOQ 生成的 SELECT 语句前面加上 CREATE OR REPLACE VIEW 子句,原则上没有什么可以阻止您使用 jOOQ 创建视图【参考方案2】:

在 jOOQ 3.1 中没有明确支持 CREATE VIEW DDL 语句,尽管 some users on the user group 已经在挑战 jOOQ 以非正式地支持它。由于这可能是一个常见的用例,因此将其放在路线图上可能是有意义的:#2582

在添加任何官方支持之前,您仍然可以使用纯 SQL:

DSLContext ctx = DSL.using(...);
ctx.execute("CREATE OR REPLACE VIEW my_view AS 0;",
    select(a, b).from(my_table).where(...)
);

上面的示例使用DSLContext.query(...) 构造以jOOQ QueryPart 对象作为参数的普通SQL 查询。

【讨论】:

以上是关于在 Jooq 中创建 VIEW 语句的主要内容,如果未能解决你的问题,请参考以下文章

在一个语句中创建一个带有名称的数字向量?

JOOQ 和 TimescaleDB - 如何在 JOOQ 中实现基本的 time_bucket 语句

如何在 php 中创建安全的 mysql 准备语句?

如何在一个grant语句里授权多个库

如何在 UITableView 的 switch 语句中创建变量?

DBT 模型:如何从查询中创建变量并在 If 语句中使用它