Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/303.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java ORA-00979中的jOOQ JSON查询结果_Java_Jooq - Fatal编程技术网

Java ORA-00979中的jOOQ JSON查询结果

Java ORA-00979中的jOOQ JSON查询结果,java,jooq,Java,Jooq,我正在尝试对Oracle 19c数据库执行此查询: Field<JSON> employee = DSL.field("employee", JSON.class); Table<Record1<JSON>> employees = dsl .select(jsonObject(jsonEntry("id", EMPLOYEE.ID), jsonEntry("name", E

我正在尝试对Oracle 19c数据库执行此查询:

Field<JSON> employee = DSL.field("employee", JSON.class);

Table<Record1<JSON>> employees = dsl
            .select(jsonObject(jsonEntry("id", EMPLOYEE.ID), jsonEntry("name", EMPLOYEE.NAME), jsonEntry("phones",
                    jsonArrayAgg(
                            jsonObject(jsonEntry("number", PHONE.PHONENUMBER), jsonEntry("type", PHONE.TYPE)))
            )).as(employee))
            .from(EMPLOYEE)
            .join(PHONE).on(PHONE.EMPLOYEE_ID.eq(EMPLOYEE.ID))
            .groupBy(EMPLOYEE.ID)
            .asTable();

String json = dsl
            .select(jsonArrayAgg(employees.field(employee)))
            .from(employees)
            .fetchOneInto(String.class);

jOOQs JSON功能不适用于Oracle吗?

这与您的JSON使用无关。如果将其全部删除并编写此查询,也会发生同样的情况:

dsl.select(EMPLOYEE.ID,EMPLOYEE.NAME)
.来自(雇员)
.join(电话).on(电话.员工ID.eq(员工ID))
.groupBy(EMPLOYEE.ID);
您的查询将在MySQL、PostgreSQL或标准SQL中工作,在按主键列分组后,您仍然可以投影所有功能相关的列。但在甲骨文中,这是行不通的。因此,您必须将
EMPLOYEE.NAME
添加到
groupby
子句中

有一个相应转换SQL的功能请求,但jOOQ 3.14还不支持此功能:


请注意,
JSON_ARRAYAGG()
将空集聚合为
NULL
,而不是聚合为空的
[]

哦,对了。愚蠢的我!我正在将测试从PostgreSQL迁移到Oracle:-)谢谢!
org.springframework.jdbc.BadSqlGrammarException: jOOQ; bad SQL grammar 
    [select json_arrayagg("alias_113372058".employee) from 
        (select json_object(key ? value "EMPLOYEE"."ID", key ? value "EMPLOYEE"."NAME", key ? value json_arrayagg(json_object(key ? value "PHONE"."PHONENUMBER", key ? value "PHONE"."TYPE"))) employee from "EMPLOYEE" join "PHONE" on "PHONE"."EMPLOYEE_ID" = "EMPLOYEE"."ID" group by "EMPLOYEE"."ID") "alias_113372058"]; 
nested exception is java.sql.SQLSyntaxErrorException: ORA-00979: Kein GROUP BY-Ausdruck