{ CREATE | REPLACE } RECURSIVE VIEW [ database_name_1. | user_name_1. ] view_name_1
( column_name [,...] ) AS
{ view_specification | ( view_specification ) } [;]
- view_specification
[ locking_specification [...] ]
[ date_specification ]
seed_statement
UNION ALL [ union_specification [...] ]
recursive_statement
- locking_specification
LOCKING item_to_lock [ FOR | IN ] lock_type [ MODE ] [ NOWAIT ]
- date_specification
AS OF calendar_function (
{ DATE date_expression | TIMESTAMP [ WITH TIME ZONE ] timestamp_expression }
[, calendar_name ]
)
- seed_statement
{ SELECT | SEL } [ DISTINCT | ALL ] { * | seed_statement_selection [,...] }
FROM seed_statement_source [,...]
[ WHERE search_condition ]
[ GROUP BY grouping_specification [,...] ]
[ HAVING having_condition ]
[ QUALIFY qualify_condition ]
- union_specification
{ seed_statement_specification [...] | recursive_statement UNION ALL }
- recursive_statement
{ SELECT | SEL } [ ALL ] { * | recursive_statement_selection [,...] }
FROM recursive_statement_source [,...]
[ WHERE search_condition ] [;]
- item_to_lock
{ [ DATABASE ] { database_name_2 | user_name_2 } |
[ TABLE ] [ database_name_3. | user_name_3. ] table_name |
[ VIEW ] [ database_name_4. | user_name_4. ] view_name_2 |
ROW
}
- lock_type
{ ACCESS |
{ EXCLUSIVE | EXCL } |
SHARE |
READ [ OVERRIDE ] |
WRITE |
LOAD COMMITTED
}
- seed_statement_selection
{ expression | [ database_name. | user_name. ] table_name.* }
- seed_statement_source
{ [ database_name. | user_name. ]
{ table_name [ [AS] correlation_name ] |
joined_table
{ join_on | CROSS JOIN [ database_name. | user_name. ] single_table }
} |
( subquery ) [AS] derived_table_name [ ( column_name [,...] ) ]
}
- grouping_specification
{ ordinary_grouping_set |
empty_grouping_set |
rollup_list |
cube_list |
grouping_set_specification
}
- seed_statement_specification
seed_statement UNION ALL
- recursive_statement_selection
{ expression [ [AS] correlation_name ] | table_name.* }
- recursive_statement_source
{ table_name [ [AS] correlation_name ] |
joined_table
{ [ INNER | { LEFT | RIGHT | FULL } [ OUTER ] ]
JOIN joined_table ON search_condition |
CROSS JOIN single_table
}
}
- join_on
[ INNER | { LEFT | RIGHT | FULL } [ OUTER] ] JOIN
[ database_name. | user_name. ] joined_table ON search_condition