jooq 中具有动态名称的存储过程

Stored procedures in jooq with dynamic names

我想在 JOOQ 中按名称动态调用来自 PostgreSQL 的存储过程:

final Field function = function("report_" + name, Object.class, (Field[])params.toArray(new Field[params.size()]));

dsl().select(function).fetchArrays();

例如它生成:

select report_total_requests('83.84.85.3184');

哪个returns:

 report_total_requests 
-----------------------
 (3683,2111,0)
 (29303,10644,1)

在java中它是“(3683,2111,0)”对象的数组。

我要生成:

select * from report_total_requests('83.84.85.3184')

生产:

total | users | priority 
------+-------+----------
 3683 |  2111 |        0
29303 | 10644 |        1

即在java对象数组的数组中

有什么想法吗?

前进的方向是使用 plain SQL 如下:

Name name = DSL.name("report_" + name);
QueryPart arguments = DSL.list(params);
dsl().select().from("{0}({1})", name, arguments).fetch();

请注意,我已将函数名称包装在 DSL.name() 对象中,以防止 SQL 注入。