jOOQ:如何查看已别名的字段?

Posted

技术标签:

【中文标题】jOOQ:如何查看已别名的字段?【英文标题】:jOOQ: how can I view a field which has been aliased? 【发布时间】:2015-06-06 13:55:00 【问题描述】:

我一直在玩 jOOQ(在 Scala 中),希望能回答(看似简单的)问题:如何查看已别名的字段?

希望下面的例子能说明我的问题:

import org.jooq.impl._
import org.jooq.impl.DSL._

val a = field("a", SQLDataType.DOUBLE)
val b = a.as("b")

// prints "b" 
println(b)

// however, I would like it to print a "b" as in
select(b)

编辑:

我发现@Lukas Eder 提供的答案不起作用的情况。以下案例的修改答案将不胜感激(欢呼):

val f = field("amount", SQLDataType.DOUBLE)
val p = field("partition", SQLDataType.INTEGER)
val o = field("order_by", SQLDataType.DATE)

// prints as expected
val r = coalesce(sum(f).over().partitionBy(p).orderBy(o), 0)

// coalesce(
//   sum(amount) over (partition by partition order by order_by asc), 
//   0)

val a = r.as("test")

// question mark instead of 0
println(
  DSL.using(SQLDialect.POSTGRES)
   .renderContext()
   .declareFields(true)
   .render(a)
)

//  coalesce(sum(amount) over (partition by partition order by order_by asc), ?) as "test"

【问题讨论】:

【参考方案1】:

为别名字段生成 SQL 的“正常”方式就是您所看到的方式。引用字段的方式,例如当放入ORDER BY 子句时。

为别名字段生成 SQL 的“例外”方式是将其放在 SELECT 子句中,即当它声明自己时。

所有QueryPart.toString() 实现都会生成“正常”的SQL 字符串。如果你明确地想要在SELECT 子句中生成字段声明,你可以直接使用jOOQ's rendering API:

println(
  DSL.using(SQLDialect.ORACLE)
     .renderContext()
     .declareFields(true)
     .render(b)
)

【讨论】:

谢谢卢卡斯 - 非常有帮助:)

以上是关于jOOQ:如何查看已别名的字段?的主要内容,如果未能解决你的问题,请参考以下文章

如何查看 jOOQ 在编译时执行的 SQL 语句?

arcgis如何保存属性字段别名?版本 10.2

别名和快捷键

JOOQ:如何获取按字段分组的记录?

与查看结果相比,如何最好地检查已导出到xlsx文件的nvarchar字段的完整性?

如何使用 jOOQ gradle 插件将 postgres 中的 bigint[] 字段转换为类字段