@@ -1042,13 +1042,14 @@ alter_session_set_clause
10421042 ;
10431043
10441044create_sequence
1045- : CREATE SEQUENCE sequence_name (sequence_start_clause | sequence_spec)* SEMICOLON
1045+ : CREATE SEQUENCE ( IF NOT EXISTS )? sequence_name sequence_spec* ( SHARING EQUALS_OP ( METADATA | DATA | NONE ))? SEMICOLON
10461046 ;
10471047
10481048// Common Sequence
10491049
10501050sequence_spec
10511051 : INCREMENT BY UNSIGNED_INTEGER
1052+ | sequence_start_clause
10521053 | MAXVALUE UNSIGNED_INTEGER
10531054 | NOMAXVALUE
10541055 | MINVALUE UNSIGNED_INTEGER
@@ -1059,6 +1060,14 @@ sequence_spec
10591060 | NOCACHE
10601061 | ORDER
10611062 | NOORDER
1063+ | KEEP
1064+ | NOKEEP
1065+ | SCALE (EXTEND | NOEXTEND )?
1066+ | NOSCALE
1067+ | SHARD (EXTEND | NOEXTEND )?
1068+ | NOSHARD
1069+ | SESSION
1070+ | GLOBAL
10621071 ;
10631072
10641073sequence_start_clause
@@ -7239,6 +7248,106 @@ outer_join_sign
72397248 : LEFT_PAREN PLUS_SIGN RIGHT_PAREN
72407249 ;
72417250
7251+ // === Rules added from upstream for enhanced Oracle support ===
7252+
7253+ // Oracle 21c+ annotations support
7254+ annotations_clause
7255+ : ANNOTATIONS ' (' annotations_list ' )'
7256+ ;
7257+
7258+ annotations_list
7259+ : (ADD (IF NOT EXISTS | OR REPLACE )? | DROP (IF EXISTS )? | REPLACE )? annotation (' ,' annotations_list)*
7260+ ;
7261+
7262+ annotation
7263+ : identifier CHAR_STRING ?
7264+ ;
7265+
7266+ // CREATE SCHEMA statement
7267+ create_schema
7268+ : CREATE SCHEMA AUTHORIZATION schema_name (create_table | create_view | grant_statement)*
7269+ ;
7270+
7271+ // DROP MATERIALIZED VIEW LOG statement
7272+ drop_materialized_view_log
7273+ : DROP MATERIALIZED VIEW LOG (IF EXISTS )? ON tableview_name
7274+ ;
7275+
7276+ // Compound trigger support
7277+ compound_trigger_block
7278+ : COMPOUND TRIGGER seq_of_declare_specs? timing_point_section+ END trigger_name?
7279+ ;
7280+
7281+ timing_point_section
7282+ : bk = BEFORE STATEMENT IS tps_block BEFORE STATEMENT ' ;'
7283+ | bk = BEFORE EACH ROW IS tps_block BEFORE EACH ROW ' ;'
7284+ | ak = AFTER STATEMENT IS tps_block AFTER STATEMENT ' ;'
7285+ | ak = AFTER EACH ROW IS tps_block AFTER EACH ROW ' ;'
7286+ ;
7287+
7288+ tps_block
7289+ : declare_spec* body
7290+ ;
7291+
7292+ // Partition operations
7293+ move_table_partition
7294+ : MOVE (partition_extended_names (MAPPING TABLE )? table_partition_description
7295+ | subpartition_extended_names indexing_clause? partitioning_storage_clause?)
7296+ (filter_condition | update_index_clauses | parallel_clause | allow_or_disallow CLUSTERING | ONLINE )*
7297+ ;
7298+
7299+ rename_table_partition
7300+ : RENAME (partition_extended_names | subpartition_extended_names) TO partition_name
7301+ ;
7302+
7303+ // Implicit cursor expressions (SQL%BULK_ROWCOUNT, SQL%BULK_EXCEPTIONS)
7304+ implicit_cursor_expression
7305+ : SQL (PERCENT_BULK_ROWCOUNT ' (' expression ' )'
7306+ | PERCENT_BULK_EXCEPTIONS (' .' COUNT | ' (' expression ' )' ' .' (ERROR_INDEX | ERROR_CODE )))
7307+ ;
7308+
7309+ // Preprocessor directives
7310+ inquiry_directive
7311+ : INQUIRY_DIRECTIVE
7312+ ;
7313+
7314+ error_directive
7315+ : DOLLAR_ERROR concatenation DOLLAR_END
7316+ ;
7317+
7318+ selection_directive
7319+ : DOLLAR_IF condition DOLLAR_THEN selection_directive_body
7320+ (DOLLAR_ELSIF selection_directive_body)* (DOLLAR_ELSE selection_directive_body)? DOLLAR_END
7321+ ;
7322+
7323+ selection_directive_body
7324+ : (pragma_declaration? statement ' ;' | variable_declaration | error_directive | function_body | procedure_body)+
7325+ ;
7326+
7327+ // Pipelined functions with USING clause
7328+ pipelined_using_clause
7329+ : PIPELINED ((ROW | TABLE ) POLYMORPHIC )? USING implementation_type_name
7330+ ;
7331+
7332+ // Accessible by clause for package visibility
7333+ accessible_by_clause
7334+ : ACCESSIBLE BY ' (' accessor (' ,' accessor)* ' )'
7335+ ;
7336+
7337+ accessor
7338+ : (FUNCTION | PROCEDURE | PACKAGE | TRIGGER | TYPE ) function_name
7339+ ;
7340+
7341+ // Default collation clause
7342+ default_collation_clause
7343+ : DEFAULT COLLATION USING_NLS_COMP
7344+ ;
7345+
7346+ // Helper rule for filter condition in partition operations
7347+ filter_condition
7348+ : INCLUDING ROWS where_clause
7349+ ;
7350+
72427351regular_id
72437352 : non_reserved_keywords_pre12c
72447353 | non_reserved_keywords_in_12c
0 commit comments