diff --git a/jOOQ/src/main/java/org/jooq/impl/AbstractRoutine.java b/jOOQ/src/main/java/org/jooq/impl/AbstractRoutine.java index 59a16a9a80..3dee77052b 100644 --- a/jOOQ/src/main/java/org/jooq/impl/AbstractRoutine.java +++ b/jOOQ/src/main/java/org/jooq/impl/AbstractRoutine.java @@ -490,7 +490,14 @@ implements for (Parameter p : outParameters) fields.add(DSL.field(DSL.name(p.getName()), p.getDataType())); - Result result = create.select(fields).from("{0}", asField()).fetch(); + Result result; + + // [#12659] Handle special case of single UDT OUT parameter, which cannot + // be referred to by its name, regrettably + if (fields.size() == 1 && fields.get(0).getDataType().isUDT()) + result = create.select(field("row(t.*)", fields.get(0).getDataType())).from("{0} as t", asField()).fetch(); + else + result = create.select(fields).from("{0}", asField()).fetch(); int i = 0;