Restrictions on recursive common table expressions

The following restrictions apply to recursive common table expressions.

  • References to other recursive common table expressions cannot appear within the definition of recursive common table expressions. So, recursive common table expressions cannot be mutually recursive. However, non-recursive common table expressions can contain references to recursive ones, and recursive common table expressions can contain references to non-recursive ones.

  • The only set operator permitted between the initial subquery and the recursive subquery is UNION ALL. No other set operators are permitted.

  • Within the definition of a recursive subquery, a self-reference to the recursive table expression can appear only within the FROM clause of the recursive subquery.

  • When a self-reference appears within the FROM clause of the recursive subquery, the reference to the recursive table cannot appear on the null-supplying side of an outer join.

  • The recursive subquery cannot contain DISTINCT, or a GROUP BY or an ORDER BY clause.

  • The recursive subquery can not make use of any aggregate function.

  • To prevent runaway recursive queries, an error is generated if the number of levels of recursion exceeds the current setting of the max_recursive_iterations option. The default value of this option is 100.