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

时间:2016-10-25 12:01:41

标签: java postgresql stored-procedures jooq

我想动态调用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');

返回:

 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数组中

有什么想法吗?

1 个答案:

答案 0 :(得分:2)

前进的方法是使用plain SQL,如下所示:

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

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