我需要将查询从Oracle SQL转换为Postgres。查询从游标返回单行元素。我将在Oracle中编写一个简化形式的查询:
@Override
public Object invoke(Object proxy, Method method, Object[] args) {
if (method.isAnnotationPresent(IDCheck.class)) {
//proceed with navigation and throw exception if invalid
}
// delegate the method execution to a wrapped implementor of the MyInterface
}
如果表“sys_users”有2个元素:
select CONCAT_LIST( cursor( select first_name || '-' || last_name from sys_users) ,',') as users_list from dual
结果是:
1. first name - "John", last name - "Smith"
2. first name - "George", last name - "Doe" ,
如果此表中的元素相同,我需要在Postgres中获得相同的结果。
答案 0 :(得分:2)
要汇总字符串,请使用string_agg()
select string_agg(first_name || '-' || last_name, ',') as users_list
from sys_users;
请注意,如果first_name
或last_name
可以为null,则连接的结果也将为null(与Oracle不同)。要解决这个问题,请使用concat()
代替将其视为空字符串:
select string_agg(concat(first_name, '-', last_name), ',') as users_list
from sys_users;
甚至更好:使用concat_ws()
如果元素为NULL,则会遗漏'-'
:
select string_agg(concat_ws('-', first_name, last_name), ',') as users_list
from sys_users;
顺便说一句:您的Oracle查询过于复杂,如果将string_agg()
替换为listagg()
select listagg(firstname||'-'||lastname, ',') within group (order by lastname)
from sys_users;