lava-oushudb-dt-sql-parser/src/grammar/plsql/PlSqlParser.g4
Ziv 34f64e6bea
refactor: migrate antlr4 v4.12.0 to antlr4ts(4.9.0) (#106)
* build: ignore gen folder

* refactor: remove useless code

* fix: correct the Javascript usage in grammar

* refactor: move to antlr4ts

* fix: remove useless

* fix: update grammars for javascript target

* refactor: migrate to antlr4ts

* refactor: migrate to antlr4ts

* refactor: implements ParserErrorListener

* fix: rename the  start reserved word

* refactor: remove unused import

* refactor: migrate to antlr4ts

* test: update the expects of test cases

* refactor: migrate hive to antlr4ts

* refactor: update the incompatible syntax for antlr4ts

* refactor: migrate pgsql grammar to antlr4ts, increasing tests

* refactor: migrate the plsql to antlr4ts

* build: remove unused config

* build: migrate to antlr4ts

* build: migrate ts-jest to @swc/jest

* refactor: migrate to anltr4ts

* build: migrate ts-jest to @swc/jest
2023-05-30 14:44:03 +08:00

6632 lines
143 KiB
ANTLR

/**
* Oracle(c) PL/SQL 11g Parser
*
* Copyright (c) 2009-2011 Alexandre Porcelli <alexandre.porcelli@gmail.com>
* Copyright (c) 2015-2019 Ivan Kochurkin (KvanTTT, kvanttt@gmail.com, Positive Technologies).
* Copyright (c) 2017-2018 Mark Adams <madams51703@gmail.com>
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
parser grammar PlSqlParser;
options {
tokenVocab=PlSqlLexer;
superClass=PlSqlBaseParser;
}
@parser::header {
import PlSqlBaseParser from './PlSqlBaseParser';
}
program: sql_script SEMICOLON? EOF;
sql_script
: (unit_statement | sql_plus_command)*
;
unit_statement
: transaction_control_statements
| alter_cluster
| alter_database
| alter_function
| alter_package
| alter_procedure
| alter_sequence
| alter_session
| alter_trigger
| alter_type
| alter_table
| alter_tablespace
| alter_index
| alter_library
| alter_materialized_view
| alter_materialized_view_log
| alter_user
| alter_view
| analyze
| associate_statistics
| audit_traditional
| unified_auditing
| create_function_body
| create_procedure_body
| create_package
| create_package_body
| create_index
| create_table
| create_tablespace
| create_cluster
| create_context
| create_view //TODO
| create_directory
| create_materialized_view
| create_materialized_view_log
| create_user
| create_sequence
| create_trigger
| create_type
| create_synonym
| drop_function
| drop_package
| drop_procedure
| drop_sequence
| drop_trigger
| drop_type
| data_manipulation_language_statements
| drop_table
| drop_view
| drop_index
| rename_object
| comment_on_column
| comment_on_table
| anonymous_block
| grant_statement
| procedure_call
;
// DDL -> SQL Statements for Stored PL/SQL Units
// Function DDLs
drop_function
: DROP FUNCTION function_name ';'
;
alter_function
: ALTER FUNCTION function_name COMPILE DEBUG? compiler_parameters_clause* (REUSE SETTINGS)? ';'
;
create_function_body
: CREATE (OR REPLACE)? FUNCTION function_name ('(' parameter (',' parameter)* ')')?
RETURN type_spec (invoker_rights_clause | parallel_enable_clause | result_cache_clause | DETERMINISTIC)*
((PIPELINED? (IS | AS) (DECLARE? seq_of_declare_specs? body | call_spec)) | (PIPELINED | AGGREGATE) USING implementation_type_name) ';'
;
// Creation Function - Specific Clauses
parallel_enable_clause
: PARALLEL_ENABLE partition_by_clause?
;
partition_by_clause
: '(' PARTITION expression BY (ANY | (HASH | RANGE | LIST) paren_column_list) streaming_clause? ')'
;
result_cache_clause
: RESULT_CACHE relies_on_part?
;
relies_on_part
: RELIES_ON '(' tableview_name (',' tableview_name)* ')'
;
streaming_clause
: (ORDER | CLUSTER) expression BY paren_column_list
;
// Package DDLs
drop_package
: DROP PACKAGE BODY? (schema_object_name '.')? package_name ';'
;
alter_package
: ALTER PACKAGE package_name COMPILE DEBUG? (PACKAGE | BODY | SPECIFICATION)? compiler_parameters_clause* (REUSE SETTINGS)? ';'
;
create_package
: CREATE (OR REPLACE)? PACKAGE (schema_object_name '.')? package_name invoker_rights_clause? (IS | AS) package_obj_spec* END package_name? ';'
;
create_package_body
: CREATE (OR REPLACE)? PACKAGE BODY (schema_object_name '.')? package_name (IS | AS) package_obj_body* (BEGIN seq_of_statements)? END package_name? ';'
;
// Create Package Specific Clauses
package_obj_spec
: pragma_declaration
| variable_declaration
| subtype_declaration
| cursor_declaration
| exception_declaration
| type_declaration
| procedure_spec
| function_spec
;
procedure_spec
: PROCEDURE identifier ('(' parameter ( ',' parameter )* ')')? ';'
;
function_spec
: FUNCTION identifier ('(' parameter ( ',' parameter)* ')')?
RETURN type_spec PIPELINED? DETERMINISTIC? (RESULT_CACHE)? ';'
;
package_obj_body
: variable_declaration
| subtype_declaration
| cursor_declaration
| exception_declaration
| type_declaration
| procedure_body
| function_body
| procedure_spec
| function_spec
;
// Procedure DDLs
drop_procedure
: DROP PROCEDURE procedure_name ';'
;
alter_procedure
: ALTER PROCEDURE procedure_name COMPILE DEBUG? compiler_parameters_clause* (REUSE SETTINGS)? ';'
;
function_body
: FUNCTION identifier ('(' parameter (',' parameter)* ')')?
RETURN type_spec (invoker_rights_clause | parallel_enable_clause | result_cache_clause | DETERMINISTIC)*
((PIPELINED? DETERMINISTIC? (IS | AS) (DECLARE? seq_of_declare_specs? body | call_spec)) | (PIPELINED | AGGREGATE) USING implementation_type_name) ';'
;
procedure_body
: PROCEDURE identifier ('(' parameter (',' parameter)* ')')? (IS | AS)
(DECLARE? seq_of_declare_specs? body | call_spec | EXTERNAL) ';'
;
create_procedure_body
: CREATE (OR REPLACE)? PROCEDURE procedure_name ('(' parameter (',' parameter)* ')')?
invoker_rights_clause? (IS | AS)
(DECLARE? seq_of_declare_specs? body | call_spec | EXTERNAL) ';'
;
// Trigger DDLs
drop_trigger
: DROP TRIGGER trigger_name ';'
;
alter_trigger
: ALTER TRIGGER alter_trigger_name=trigger_name
((ENABLE | DISABLE) | RENAME TO rename_trigger_name=trigger_name | COMPILE DEBUG? compiler_parameters_clause* (REUSE SETTINGS)?) ';'
;
create_trigger
: CREATE ( OR REPLACE )? TRIGGER trigger_name
(simple_dml_trigger | compound_dml_trigger | non_dml_trigger)
trigger_follows_clause? (ENABLE | DISABLE)? trigger_when_clause? trigger_body ';'
;
trigger_follows_clause
: FOLLOWS trigger_name (',' trigger_name)*
;
trigger_when_clause
: WHEN '(' condition ')'
;
// Create Trigger Specific Clauses
simple_dml_trigger
: (BEFORE | AFTER | INSTEAD OF) dml_event_clause referencing_clause? for_each_row?
;
for_each_row
: FOR EACH ROW
;
compound_dml_trigger
: FOR dml_event_clause referencing_clause?
;
non_dml_trigger
: (BEFORE | AFTER) non_dml_event (OR non_dml_event)* ON (DATABASE | (schema_name '.')? SCHEMA)
;
trigger_body
: COMPOUND TRIGGER
| CALL identifier
| trigger_block
;
non_dml_event
: ALTER
| ANALYZE
| ASSOCIATE STATISTICS
| AUDIT
| COMMENT
| CREATE
| DISASSOCIATE STATISTICS
| DROP
| GRANT
| NOAUDIT
| RENAME
| REVOKE
| TRUNCATE
| DDL
| STARTUP
| SHUTDOWN
| DB_ROLE_CHANGE
| LOGON
| LOGOFF
| SERVERERROR
| SUSPEND
| DATABASE
| SCHEMA
| FOLLOWS
;
dml_event_clause
: dml_event_element (OR dml_event_element)* ON dml_event_nested_clause? tableview_name
;
dml_event_element
: (DELETE | INSERT | UPDATE) (OF column_list)?
;
dml_event_nested_clause
: NESTED TABLE tableview_name OF
;
referencing_clause
: REFERENCING referencing_element+
;
referencing_element
: (NEW | OLD | PARENT) column_alias
;
// DDLs
drop_type
: DROP TYPE BODY? type_name (FORCE | VALIDATE)? ';'
;
alter_type
: ALTER TYPE type_name
(compile_type_clause
| replace_type_clause
//TODO | {input.LT(2).getText().equalsIgnoreCase("attribute")}? alter_attribute_definition
| alter_method_spec
| alter_collection_clauses
| modifier_clause
| overriding_subprogram_spec
) dependent_handling_clause? ';'
;
// Alter Type Specific Clauses
compile_type_clause
: COMPILE DEBUG? (SPECIFICATION | BODY)? compiler_parameters_clause* (REUSE SETTINGS)?
;
replace_type_clause
: REPLACE invoker_rights_clause? AS OBJECT '(' object_member_spec (',' object_member_spec)* ')'
;
alter_method_spec
: alter_method_element (',' alter_method_element)*
;
alter_method_element
: (ADD | DROP) (map_order_function_spec | subprogram_spec)
;
alter_collection_clauses
: MODIFY (LIMIT expression | ELEMENT TYPE type_spec)
;
dependent_handling_clause
: INVALIDATE
| CASCADE (CONVERT TO SUBSTITUTABLE | NOT? INCLUDING TABLE DATA)? dependent_exceptions_part?
;
dependent_exceptions_part
: FORCE? EXCEPTIONS INTO tableview_name
;
create_type
: CREATE (OR REPLACE)? TYPE (type_definition | type_body) ';'
;
// Create Type Specific Clauses
type_definition
: type_name (OID CHAR_STRING)? object_type_def?
;
object_type_def
: invoker_rights_clause? (object_as_part | object_under_part) sqlj_object_type?
('(' object_member_spec (',' object_member_spec)* ')')? modifier_clause*
;
object_as_part
: (IS | AS) (OBJECT | varray_type_def | nested_table_type_def)
;
object_under_part
: UNDER type_spec
;
nested_table_type_def
: TABLE OF type_spec (NOT NULL_)?
;
sqlj_object_type
: EXTERNAL NAME expression LANGUAGE JAVA USING (SQLDATA | CUSTOMDATUM | ORADATA)
;
type_body
: BODY type_name (IS | AS) (type_body_elements)+ END
;
type_body_elements
: map_order_func_declaration
| subprog_decl_in_type
| overriding_subprogram_spec
;
map_order_func_declaration
: (MAP | ORDER) MEMBER func_decl_in_type
;
subprog_decl_in_type
: (MEMBER | STATIC) (proc_decl_in_type | func_decl_in_type | constructor_declaration)
;
proc_decl_in_type
: PROCEDURE procedure_name '(' type_elements_parameter (',' type_elements_parameter)* ')'
(IS | AS) (call_spec | DECLARE? seq_of_declare_specs? body ';')
;
func_decl_in_type
: FUNCTION function_name ('(' type_elements_parameter (',' type_elements_parameter)* ')')?
RETURN type_spec (IS | AS) (call_spec | DECLARE? seq_of_declare_specs? body ';')
;
constructor_declaration
: FINAL? INSTANTIABLE? CONSTRUCTOR FUNCTION type_spec
('(' (SELF IN OUT type_spec ',') type_elements_parameter (',' type_elements_parameter)* ')')?
RETURN SELF AS RESULT (IS | AS) (call_spec | DECLARE? seq_of_declare_specs? body ';')
;
// Common Type Clauses
modifier_clause
: NOT? (INSTANTIABLE | FINAL | OVERRIDING)
;
object_member_spec
: identifier type_spec sqlj_object_type_attr?
| element_spec
;
sqlj_object_type_attr
: EXTERNAL NAME expression
;
element_spec
: modifier_clause? element_spec_options+ (',' pragma_clause)?
;
element_spec_options
: subprogram_spec
| constructor_spec
| map_order_function_spec
;
subprogram_spec
: (MEMBER | STATIC) (type_procedure_spec | type_function_spec)
;
// TODO: should be refactored such as Procedure body and Function body, maybe Type_Function_Body and overriding_function_body
overriding_subprogram_spec
: OVERRIDING MEMBER overriding_function_spec
;
overriding_function_spec
: FUNCTION function_name ('(' type_elements_parameter (',' type_elements_parameter)* ')')?
RETURN (type_spec | SELF AS RESULT)
(PIPELINED? (IS | AS) (DECLARE? seq_of_declare_specs? body))? ';'?
;
type_procedure_spec
: PROCEDURE procedure_name '(' type_elements_parameter (',' type_elements_parameter)* ')' ((IS | AS) call_spec)?
;
type_function_spec
: FUNCTION function_name ('(' type_elements_parameter (',' type_elements_parameter)* ')')?
RETURN (type_spec | SELF AS RESULT) ((IS | AS) call_spec | EXTERNAL VARIABLE? NAME expression)?
;
constructor_spec
: FINAL? INSTANTIABLE? CONSTRUCTOR FUNCTION
type_spec ('(' (SELF IN OUT type_spec ',') type_elements_parameter (',' type_elements_parameter)* ')')?
RETURN SELF AS RESULT ((IS | AS) call_spec)?
;
map_order_function_spec
: (MAP | ORDER) MEMBER type_function_spec
;
pragma_clause
: PRAGMA RESTRICT_REFERENCES '(' pragma_elements (',' pragma_elements)* ')'
;
pragma_elements
: identifier
| DEFAULT
;
type_elements_parameter
: parameter_name type_spec
;
// Sequence DDLs
drop_sequence
: DROP SEQUENCE sequence_name ';'
;
alter_sequence
: ALTER SEQUENCE sequence_name sequence_spec+ ';'
;
alter_session
: ALTER SESSION (
ADVISE ( COMMIT | ROLLBACK | NOTHING )
| CLOSE DATABASE LINK parameter_name
| enable_or_disable COMMIT IN PROCEDURE
| enable_or_disable GUARD
| (enable_or_disable | FORCE) PARALLEL (DML | DDL | QUERY) (PARALLEL (literal | parameter_name))?
| SET alter_session_set_clause
)
;
alter_session_set_clause
: parameter_name '=' parameter_value
;
create_sequence
: CREATE SEQUENCE sequence_name (sequence_start_clause | sequence_spec)* ';'
;
// Common Sequence
sequence_spec
: INCREMENT BY UNSIGNED_INTEGER
| MAXVALUE UNSIGNED_INTEGER
| NOMAXVALUE
| MINVALUE UNSIGNED_INTEGER
| NOMINVALUE
| CYCLE
| NOCYCLE
| CACHE UNSIGNED_INTEGER
| NOCACHE
| ORDER
| NOORDER
;
sequence_start_clause
: START WITH UNSIGNED_INTEGER
;
create_index
: CREATE (UNIQUE | BITMAP)? INDEX index_name
ON (cluster_index_clause | table_index_clause | bitmap_join_index_clause)
UNUSABLE?
';'
;
cluster_index_clause
: CLUSTER cluster_name index_attributes?
;
cluster_name
: (id_expression '.')? id_expression
;
table_index_clause
: tableview_name table_alias? '(' index_expr (ASC | DESC)? (',' index_expr (ASC | DESC)? )* ')'
index_properties?
;
bitmap_join_index_clause
: tableview_name '(' (tableview_name | table_alias)? column_name (ASC | DESC)? (',' (tableview_name | table_alias)? column_name (ASC | DESC)? )* ')'
FROM tableview_name table_alias (',' tableview_name table_alias)*
where_clause local_partitioned_index? index_attributes?
;
index_expr
: column_name
| expression
;
index_properties
: (global_partitioned_index | local_partitioned_index | index_attributes)+
| INDEXTYPE IS (domain_index_clause | xmlindex_clause)
;
domain_index_clause
: indextype local_domain_index_clause? parallel_clause? (PARAMETERS '(' odci_parameters ')' )?
;
local_domain_index_clause
: LOCAL ('(' PARTITION partition_name (PARAMETERS '(' odci_parameters ')' )? (',' PARTITION partition_name (PARAMETERS '(' odci_parameters ')' )? )* ')' )?
;
xmlindex_clause
: (XDB '.')? XMLINDEX local_xmlindex_clause?
parallel_clause? //TODO xmlindex_parameters_clause?
;
local_xmlindex_clause
: LOCAL ('(' PARTITION partition_name (',' PARTITION partition_name //TODO xmlindex_parameters_clause?
)* ')')?
;
global_partitioned_index
: GLOBAL PARTITION BY (RANGE '(' column_name (',' column_name)* ')' '(' index_partitioning_clause ')'
| HASH '(' column_name (',' column_name)* ')'
(individual_hash_partitions
| hash_partitions_by_quantity
)
)
;
index_partitioning_clause
: PARTITION partition_name? VALUES LESS THAN '(' literal (',' literal)* ')'
segment_attributes_clause?
;
local_partitioned_index
: LOCAL (on_range_partitioned_table
| on_list_partitioned_table
| on_hash_partitioned_table
| on_comp_partitioned_table
)?
;
on_range_partitioned_table
: '(' partitioned_table (',' partitioned_table)* ')'
;
on_list_partitioned_table
: '(' partitioned_table (',' partitioned_table)* ')'
;
partitioned_table
: PARTITION partition_name?
(segment_attributes_clause | key_compression)*
UNUSABLE?
;
on_hash_partitioned_table
: STORE IN '(' tablespace (',' tablespace)* ')'
| '(' on_hash_partitioned_clause (',' on_hash_partitioned_clause)* ')'
;
on_hash_partitioned_clause
: PARTITION partition_name? (TABLESPACE tablespace)?
key_compression? UNUSABLE?
;
on_comp_partitioned_table
: (STORE IN '(' tablespace (',' tablespace)* ')' )?
'(' on_comp_partitioned_clause (',' on_comp_partitioned_clause)* ')'
;
on_comp_partitioned_clause
: PARTITION partition_name?
(segment_attributes_clause | key_compression)*
UNUSABLE index_subpartition_clause?
;
index_subpartition_clause
: STORE IN '(' tablespace (',' tablespace)* ')'
| '(' index_subpartition_subclause (',' index_subpartition_subclause)* ')'
;
index_subpartition_subclause
: SUBPARTITION subpartition_name? (TABLESPACE tablespace)?
key_compression? UNUSABLE?
;
odci_parameters
: CHAR_STRING
;
indextype
: (id_expression '.')? id_expression
;
//https://docs.oracle.com/cd/E11882_01/server.112/e41084/statements_1010.htm#SQLRF00805
alter_index
: ALTER INDEX index_name (alter_index_ops_set1 | alter_index_ops_set2) ';'
;
alter_index_ops_set1
: ( deallocate_unused_clause
| allocate_extent_clause
| shrink_clause
| parallel_clause
| physical_attributes_clause
| logging_clause
)+
;
alter_index_ops_set2
: rebuild_clause
| PARAMETERS '(' odci_parameters ')'
| COMPILE
| enable_or_disable
| UNUSABLE
| visible_or_invisible
| RENAME TO new_index_name
| COALESCE
| monitoring_nomonitoring USAGE
| UPDATE BLOCK REFERENCES
| alter_index_partitioning
;
visible_or_invisible
: VISIBLE
| INVISIBLE
;
monitoring_nomonitoring
: MONITORING
| NOMONITORING
;
rebuild_clause
: REBUILD ( PARTITION partition_name
| SUBPARTITION subpartition_name
| REVERSE
| NOREVERSE
)?
( parallel_clause
| TABLESPACE tablespace
| PARAMETERS '(' odci_parameters ')'
//TODO | xmlindex_parameters_clause
| ONLINE
| physical_attributes_clause
| key_compression
| logging_clause
)*
;
alter_index_partitioning
: modify_index_default_attrs
| add_hash_index_partition
| modify_index_partition
| rename_index_partition
| drop_index_partition
| split_index_partition
| coalesce_index_partition
| modify_index_subpartition
;
modify_index_default_attrs
: MODIFY DEFAULT ATTRIBUTES (FOR PARTITION partition_name)?
( physical_attributes_clause
| TABLESPACE (tablespace | DEFAULT)
| logging_clause
)
;
add_hash_index_partition
: ADD PARTITION partition_name? (TABLESPACE tablespace)?
key_compression? parallel_clause?
;
coalesce_index_partition
: COALESCE PARTITION parallel_clause?
;
modify_index_partition
: MODIFY PARTITION partition_name
( modify_index_partitions_ops+
| PARAMETERS '(' odci_parameters ')'
| COALESCE
| UPDATE BLOCK REFERENCES
| UNUSABLE
)
;
modify_index_partitions_ops
: deallocate_unused_clause
| allocate_extent_clause
| physical_attributes_clause
| logging_clause
| key_compression
;
rename_index_partition
: RENAME (PARTITION partition_name | SUBPARTITION subpartition_name)
TO new_partition_name
;
drop_index_partition
: DROP PARTITION partition_name
;
split_index_partition
: SPLIT PARTITION partition_name_old AT '(' literal (',' literal)* ')'
(INTO '(' index_partition_description ',' index_partition_description ')' ) ? parallel_clause?
;
index_partition_description
: PARTITION (partition_name ( (segment_attributes_clause | key_compression)+
| PARAMETERS '(' odci_parameters ')'
)
UNUSABLE?
)?
;
modify_index_subpartition
: MODIFY SUBPARTITION subpartition_name (UNUSABLE
| allocate_extent_clause
| deallocate_unused_clause
)
;
partition_name_old
: partition_name
;
new_partition_name
: partition_name
;
new_index_name
: index_name
;
create_user
: CREATE USER
user_object_name
( identified_by
| identified_other_clause
| user_tablespace_clause
| quota_clause
| profile_clause
| password_expire_clause
| user_lock_clause
| user_editions_clause
| container_clause
)+ ';'
;
// The standard clauses only permit one user per statement.
// The proxy clause allows multiple users for a proxy designation.
alter_user
: ALTER USER
user_object_name
( alter_identified_by
| identified_other_clause
| user_tablespace_clause
| quota_clause
| profile_clause
| user_default_role_clause
| password_expire_clause
| user_lock_clause
| alter_user_editions_clause
| container_clause
| container_data_clause
)+
';'
| user_object_name (',' user_object_name)* proxy_clause ';'
;
alter_identified_by
: identified_by (REPLACE id_expression)?
;
identified_by
: IDENTIFIED BY id_expression
;
identified_other_clause
: IDENTIFIED (EXTERNALLY | GLOBALLY) (AS quoted_string)?
;
user_tablespace_clause
: (DEFAULT | TEMPORARY) TABLESPACE id_expression
;
quota_clause
: QUOTA (size_clause | UNLIMITED) ON id_expression
;
profile_clause
: PROFILE id_expression
;
role_clause
: role_name (',' role_name)*
| ALL (EXCEPT role_name (',' role_name)*)*
;
user_default_role_clause
: DEFAULT ROLE (NONE | role_clause)
;
password_expire_clause
: PASSWORD EXPIRE
;
user_lock_clause
: ACCOUNT (LOCK | UNLOCK)
;
user_editions_clause
: ENABLE EDITIONS
;
alter_user_editions_clause
: user_editions_clause (FOR regular_id (',' regular_id)*)? FORCE?
;
proxy_clause
: REVOKE CONNECT THROUGH (ENTERPRISE USERS | user_object_name)
| GRANT CONNECT THROUGH
( ENTERPRISE USERS
| user_object_name
(WITH (NO ROLES | ROLE role_clause))?
(AUTHENTICATION REQUIRED)?
(AUTHENTICATED USING (PASSWORD | CERTIFICATE | DISTINGUISHED NAME))?
)
;
container_names
: LEFT_PAREN id_expression (',' id_expression)* RIGHT_PAREN
;
set_container_data
: SET CONTAINER_DATA EQUALS_OP (ALL | DEFAULT | container_names)
;
add_rem_container_data
: (ADD | REMOVE) CONTAINER_DATA EQUALS_OP container_names
;
container_data_clause
: set_container_data
| add_rem_container_data (FOR container_tableview_name)?
;
// https://docs.oracle.com/cd/E11882_01/server.112/e41084/statements_4005.htm#SQLRF01105
analyze
: ( ANALYZE (TABLE tableview_name | INDEX index_name) partition_extention_clause?
| ANALYZE CLUSTER cluster_name
)
( validation_clauses
| LIST CHAINED ROWS into_clause1?
| DELETE SYSTEM? STATISTICS
)
';'
;
partition_extention_clause
: PARTITION ( '(' partition_name ')'
| FOR '(' partition_key_value (',' partition_key_value)* ')'
)
| SUBPARTITION ( '(' subpartition_name ')'
| FOR '(' subpartition_key_value (',' subpartition_key_value)* ')'
)
;
validation_clauses
: VALIDATE REF UPDATE (SET DANGLING TO NULL_)?
| VALIDATE STRUCTURE
( CASCADE FAST
| CASCADE online_or_offline? into_clause?
| CASCADE
)?
online_or_offline? into_clause?
;
online_or_offline
: OFFLINE
| ONLINE
;
into_clause1
: INTO tableview_name?
;
//Making assumption on partition ad subpartition key value clauses
partition_key_value
: literal
;
subpartition_key_value
: literal
;
//https://docs.oracle.com/cd/E11882_01/server.112/e41084/statements_4006.htm#SQLRF01106
associate_statistics
: ASSOCIATE STATISTICS
WITH (column_association | function_association)
storage_table_clause?
';'
;
column_association
: COLUMNS tableview_name '.' column_name (',' tableview_name '.' column_name)* using_statistics_type
;
function_association
: ( FUNCTIONS function_name (',' function_name)*
| PACKAGES package_name (',' package_name)*
| TYPES type_name (',' type_name)*
| INDEXES index_name (',' index_name)*
| INDEXTYPES indextype_name (',' indextype_name)*
)
( using_statistics_type
| default_cost_clause (',' default_selectivity_clause)?
| default_selectivity_clause (',' default_cost_clause)?
)
;
indextype_name
: id_expression
;
using_statistics_type
: USING (statistics_type_name | NULL_)
;
statistics_type_name
: regular_id
;
default_cost_clause
: DEFAULT COST '(' cpu_cost ',' io_cost ',' network_cost ')'
;
cpu_cost
: UNSIGNED_INTEGER
;
io_cost
: UNSIGNED_INTEGER
;
network_cost
: UNSIGNED_INTEGER
;
default_selectivity_clause
: DEFAULT SELECTIVITY default_selectivity
;
default_selectivity
: UNSIGNED_INTEGER
;
storage_table_clause
: WITH (SYSTEM | USER) MANAGED STORAGE TABLES
;
// https://docs.oracle.com/database/121/SQLRF/statements_4008.htm#SQLRF56110
unified_auditing
: {this.isVersion12()}?
AUDIT (POLICY policy_name ((BY | EXCEPT) audit_user (',' audit_user)* )?
(WHENEVER NOT? SUCCESSFUL)?
| CONTEXT NAMESPACE oracle_namespace
ATTRIBUTES attribute_name (',' attribute_name)* (BY audit_user (',' audit_user)*)?
)
';'
;
policy_name
: identifier
;
// https://docs.oracle.com/cd/E11882_01/server.112/e41084/statements_4007.htm#SQLRF01107
// https://docs.oracle.com/database/121/SQLRF/statements_4007.htm#SQLRF01107
audit_traditional
: AUDIT ( audit_operation_clause (auditing_by_clause | IN SESSION CURRENT)?
| audit_schema_object_clause
| NETWORK
| audit_direct_path
)
(BY (SESSION | ACCESS) )? (WHENEVER NOT? SUCCESSFUL)?
audit_container_clause?
';'
;
audit_direct_path
: {this.isVersion12()}? DIRECT_PATH auditing_by_clause
;
audit_container_clause
: {this.isVersion12()}? (CONTAINER EQUALS_OP (CURRENT | ALL))
;
audit_operation_clause
: ( (sql_statement_shortcut | ALL STATEMENTS?) (',' (sql_statement_shortcut | ALL STATEMENTS?) )*
| (system_privilege | ALL PRIVILEGES) (',' (system_privilege | ALL PRIVILEGES) )*
)
;
auditing_by_clause
: BY audit_user (',' audit_user)*
;
audit_user
: regular_id
;
audit_schema_object_clause
: ( sql_operation (',' sql_operation)* | ALL) auditing_on_clause
;
sql_operation
: ALTER
| AUDIT
| COMMENT
| DELETE
| EXECUTE
| FLASHBACK
| GRANT
| INDEX
| INSERT
| LOCK
| READ
| RENAME
| SELECT
| UPDATE
;
auditing_on_clause
: ON ( object_name
| DIRECTORY regular_id
| MINING MODEL model_name
| {this.isVersion12()}? SQL TRANSLATION PROFILE profile_name
| DEFAULT
)
;
model_name
: (id_expression '.')? id_expression
;
object_name
: (id_expression '.')? id_expression
;
profile_name
: (id_expression '.')? id_expression
;
sql_statement_shortcut
: ALTER SYSTEM
| CLUSTER
| CONTEXT
| DATABASE LINK
| DIMENSION
| DIRECTORY
| INDEX
| MATERIALIZED VIEW
| NOT EXISTS
| OUTLINE
| {this.isVersion12()}? PLUGGABLE DATABASE
| PROCEDURE
| PROFILE
| PUBLIC DATABASE LINK
| PUBLIC SYNONYM
| ROLE
| ROLLBACK SEGMENT
| SEQUENCE
| SESSION
| SYNONYM
| SYSTEM AUDIT
| SYSTEM GRANT
| TABLE
| TABLESPACE
| TRIGGER
| TYPE
| USER
| VIEW
| ALTER SEQUENCE
| ALTER TABLE
| COMMENT TABLE
| DELETE TABLE
| EXECUTE PROCEDURE
| GRANT DIRECTORY
| GRANT PROCEDURE
| GRANT SEQUENCE
| GRANT TABLE
| GRANT TYPE
| INSERT TABLE
| LOCK TABLE
| SELECT SEQUENCE
| SELECT TABLE
| UPDATE TABLE
;
drop_index
: DROP INDEX index_name ';'
;
rename_object
: RENAME object_name TO object_name ';'
;
grant_statement
: GRANT
( ','?
(role_name
| system_privilege
| object_privilege paren_column_list?
)
)+
(ON grant_object_name)?
TO (grantee_name | PUBLIC) (',' (grantee_name | PUBLIC) )*
(WITH (ADMIN | DELEGATE) OPTION)?
(WITH HIERARCHY OPTION)?
(WITH GRANT OPTION)?
container_clause? ';'
;
container_clause
: CONTAINER EQUALS_OP (CURRENT | ALL)
;
create_directory
: CREATE (OR REPLACE)? DIRECTORY directory_name AS directory_path
';'
;
directory_name
: regular_id
;
directory_path
: CHAR_STRING
;
// https://docs.oracle.com/cd/E11882_01/appdev.112/e25519/alter_library.htm#LNPLS99946
// https://docs.oracle.com/database/121/LNPLS/alter_library.htm#LNPLS99946
alter_library
: ALTER LIBRARY library_name
( COMPILE library_debug? compiler_parameters_clause* (REUSE SETTINGS)?
| library_editionable
)
';'
;
library_editionable
: {this.isVersion12()}? (EDITIONABLE | NONEDITIONABLE)
;
library_debug
: {this.isVersion12()}? DEBUG
;
compiler_parameters_clause
: parameter_name EQUALS_OP parameter_value
;
parameter_value
: regular_id
;
library_name
: (regular_id '.')? regular_id
;
// https://docs.oracle.com/cd/E11882_01/server.112/e41084/statements_4004.htm#SQLRF01104
// https://docs.oracle.com/database/121/SQLRF/statements_4004.htm#SQLRF01104
alter_view
: ALTER VIEW tableview_name
( ADD out_of_line_constraint
| MODIFY CONSTRAINT constraint_name (RELY | NORELY)
| DROP ( CONSTRAINT constraint_name
| PRIMARY KEY
| UNIQUE '(' column_name (',' column_name)* ')'
)
| COMPILE
| READ (ONLY | WRITE)
| alter_view_editionable?
)
';'
;
alter_view_editionable
: {this.isVersion12()}? (EDITIONABLE | NONEDITIONABLE)
;
create_view
: CREATE (OR REPLACE)? (OR? FORCE)? EDITIONABLE? EDITIONING? VIEW
tableview_name view_options?
AS select_only_statement subquery_restriction_clause?
;
view_options
: view_alias_constraint
| object_view_clause
// | xmltype_view_clause //TODO
;
view_alias_constraint
: '(' ( ','? (table_alias inline_constraint* | out_of_line_constraint) )+ ')'
;
object_view_clause
: OF type_name
( WITH OBJECT (IDENTIFIER|ID|OID) ( DEFAULT | '(' REGULAR_ID (',' REGULAR_ID)* ')' )
| UNDER tableview_name
)
( '(' ( ','? (out_of_line_constraint | REGULAR_ID inline_constraint ) )+ ')' )*
;
inline_constraint
: (CONSTRAINT constraint_name)?
( NOT? NULL_
| UNIQUE
| PRIMARY KEY
| references_clause
| check_constraint
)
constraint_state?
;
inline_ref_constraint
: SCOPE IS tableview_name
| WITH ROWID
| (CONSTRAINT constraint_name)? references_clause constraint_state?
;
out_of_line_ref_constraint
: SCOPE FOR '(' ref_col_or_attr=regular_id ')' IS tableview_name
| REF '(' ref_col_or_attr=regular_id ')' WITH ROWID
| (CONSTRAINT constraint_name)? FOREIGN KEY '(' ( ','? ref_col_or_attr=regular_id)+ ')' references_clause constraint_state?
;
out_of_line_constraint
: ( (CONSTRAINT constraint_name)?
( UNIQUE '(' column_name (',' column_name)* ')'
| PRIMARY KEY '(' column_name (',' column_name)* ')'
| foreign_key_clause
| CHECK '(' expression ')'
)
)
constraint_state?
;
constraint_state
: ( NOT? DEFERRABLE
| INITIALLY (IMMEDIATE|DEFERRED)
| (RELY|NORELY)
| (ENABLE|DISABLE)
| (VALIDATE|NOVALIDATE)
| using_index_clause
)+
;
alter_tablespace
: ALTER TABLESPACE tablespace
( DEFAULT table_compression? storage_clause?
| MINIMUM EXTENT size_clause
| RESIZE size_clause
| COALESCE
| SHRINK SPACE_KEYWORD (KEEP size_clause)?
| RENAME TO new_tablespace_name
| begin_or_end BACKUP
| datafile_tempfile_clauses
| tablespace_logging_clauses
| tablespace_group_clause
| tablespace_state_clauses
| autoextend_clause
| flashback_mode_clause
| tablespace_retention_clause
)
';'
;
datafile_tempfile_clauses
: ADD (datafile_specification | tempfile_specification)
| DROP (DATAFILE | TEMPFILE) (filename | UNSIGNED_INTEGER) (KEEP size_clause)?
| SHRINK TEMPFILE (filename | UNSIGNED_INTEGER) (KEEP size_clause)?
| RENAME DATAFILE filename (',' filename)* TO filename (',' filename)*
| (DATAFILE | TEMPFILE) (online_or_offline)
;
tablespace_logging_clauses
: logging_clause
| NO? FORCE LOGGING
;
tablespace_group_clause
: TABLESPACE GROUP (tablespace_group_name | CHAR_STRING)
;
tablespace_group_name
: regular_id
;
tablespace_state_clauses
: ONLINE
| OFFLINE (NORMAL | TEMPORARY | IMMEDIATE)?
| READ (ONLY | WRITE)
| PERMANENT
| TEMPORARY
;
flashback_mode_clause
: FLASHBACK (ON | OFF)
;
new_tablespace_name
: tablespace
;
create_tablespace
: CREATE (BIGFILE | SMALLFILE)?
( permanent_tablespace_clause
| temporary_tablespace_clause
| undo_tablespace_clause
)
';'
;
permanent_tablespace_clause
: TABLESPACE id_expression datafile_specification?
( MINIMUM EXTENT size_clause
| BLOCKSIZE size_clause
| logging_clause
| FORCE LOGGING
| (ONLINE | OFFLINE)
| ENCRYPTION tablespace_encryption_spec
| DEFAULT //TODO table_compression? storage_clause?
| extent_management_clause
| segment_management_clause
| flashback_mode_clause
)*
;
tablespace_encryption_spec
: USING encrypt_algorithm=CHAR_STRING
;
logging_clause
: LOGGING
| NOLOGGING
| FILESYSTEM_LIKE_LOGGING
;
extent_management_clause
: EXTENT MANAGEMENT LOCAL
( AUTOALLOCATE
| UNIFORM (SIZE size_clause)?
)?
;
segment_management_clause
: SEGMENT SPACE_KEYWORD MANAGEMENT (AUTO | MANUAL)
;
temporary_tablespace_clause
: TEMPORARY TABLESPACE tablespace_name=id_expression
tempfile_specification?
tablespace_group_clause? extent_management_clause?
;
undo_tablespace_clause
: UNDO TABLESPACE tablespace_name=id_expression
datafile_specification?
extent_management_clause? tablespace_retention_clause?
;
tablespace_retention_clause
: RETENTION (GUARANTEE | NOGUARANTEE)
;
// asm_filename is just a charater string. Would need to parse the string
// to find diskgroup...
datafile_specification
: DATAFILE
(','? datafile_tempfile_spec)
;
tempfile_specification
: TEMPFILE
(','? datafile_tempfile_spec)
;
datafile_tempfile_spec
: (CHAR_STRING)? (SIZE size_clause)? REUSE? autoextend_clause?
;
redo_log_file_spec
: (DATAFILE CHAR_STRING
| '(' ( ','? CHAR_STRING )+ ')'
)?
(SIZE size_clause)?
(BLOCKSIZE size_clause)?
REUSE?
;
autoextend_clause
: AUTOEXTEND (OFF | ON (NEXT size_clause)? maxsize_clause? )
;
maxsize_clause
: MAXSIZE (UNLIMITED | size_clause)
;
build_clause
: BUILD (IMMEDIATE | DEFERRED)
;
parallel_clause
: NOPARALLEL
| PARALLEL parallel_count=UNSIGNED_INTEGER?
;
alter_materialized_view
: ALTER MATERIALIZED VIEW tableview_name
( physical_attributes_clause
| modify_mv_column_clause
| table_compression
| lob_storage_clause (',' lob_storage_clause)*
| modify_lob_storage_clause (',' modify_lob_storage_clause)*
//TODO | alter_table_partitioning
| parallel_clause
| logging_clause
| allocate_extent_clause
| deallocate_unused_clause
| shrink_clause
| (cache_or_nocache)
)?
alter_iot_clauses?
(USING INDEX physical_attributes_clause)?
alter_mv_option1?
( enable_or_disable QUERY REWRITE
| COMPILE
| CONSIDER FRESH
)?
';'
;
alter_mv_option1
: alter_mv_refresh
//TODO | MODIFY scoped_table_ref_constraint
;
alter_mv_refresh
: REFRESH ( FAST
| COMPLETE
| FORCE
| ON (DEMAND | COMMIT)
| START WITH expression
| NEXT expression
| WITH PRIMARY KEY
| USING DEFAULT? MASTER ROLLBACK SEGMENT rollback_segment?
| USING (ENFORCED | TRUSTED) CONSTRAINTS
)+
;
rollback_segment
: regular_id
;
modify_mv_column_clause
: MODIFY '(' column_name (ENCRYPT encryption_spec | DECRYPT)? ')'
;
alter_materialized_view_log
: ALTER MATERIALIZED VIEW LOG FORCE? ON tableview_name
( physical_attributes_clause
| add_mv_log_column_clause
//TODO | alter_table_partitioning
| parallel_clause
| logging_clause
| allocate_extent_clause
| shrink_clause
| move_mv_log_clause
| cache_or_nocache
)?
mv_log_augmentation? mv_log_purge_clause?
';'
;
add_mv_log_column_clause
: ADD '(' column_name ')'
;
move_mv_log_clause
: MOVE segment_attributes_clause parallel_clause?
;
mv_log_augmentation
: ADD ( ( OBJECT ID
| PRIMARY KEY
| ROWID
| SEQUENCE
)
('(' column_name (',' column_name)* ')')?
| '(' column_name (',' column_name)* ')'
)
new_values_clause?
;
create_materialized_view_log
: CREATE MATERIALIZED VIEW LOG ON tableview_name
( ( physical_attributes_clause
| TABLESPACE tablespace_name=id_expression
| logging_clause
| (CACHE | NOCACHE)
)+
)?
parallel_clause?
// table_partitioning_clauses TODO
( WITH
( ','?
( OBJECT ID
| PRIMARY KEY
| ROWID
| SEQUENCE
| COMMIT SCN
)
)*
('(' ( ','? regular_id )+ ')' new_values_clause? )?
mv_log_purge_clause?
)*
;
new_values_clause
: (INCLUDING | EXCLUDING ) NEW VALUES
;
mv_log_purge_clause
: PURGE
( IMMEDIATE (SYNCHRONOUS | ASYNCHRONOUS)?
// |START WITH CLAUSES TODO
)
;
create_materialized_view
: CREATE MATERIALIZED VIEW tableview_name
(OF type_name )?
//scoped_table_ref and column alias goes here TODO
( ON PREBUILT TABLE ( (WITH | WITHOUT) REDUCED PRECISION)?
| physical_properties? (CACHE | NOCACHE)? parallel_clause? build_clause?
)
( USING INDEX ( (physical_attributes_clause | TABLESPACE mv_tablespace=id_expression)+ )*
| USING NO INDEX
)?
create_mv_refresh?
(FOR UPDATE)?
( (DISABLE | ENABLE) QUERY REWRITE )?
AS select_only_statement
';'
;
create_mv_refresh
: ( NEVER REFRESH
| REFRESH
( (FAST | COMPLETE | FORCE)
| ON (DEMAND | COMMIT)
| (START WITH | NEXT) //date goes here TODO
| WITH (PRIMARY KEY | ROWID)
| USING
( DEFAULT (MASTER | LOCAL)? ROLLBACK SEGMENT
| (MASTER | LOCAL)? ROLLBACK SEGMENT rb_segment=REGULAR_ID
)
| USING (ENFORCED | TRUSTED) CONSTRAINTS
)+
)
;
create_context
: CREATE (OR REPLACE)? CONTEXT oracle_namespace USING (schema_object_name '.')? package_name
(INITIALIZED (EXTERNALLY | GLOBALLY)
| ACCESSED GLOBALLY
)?
';'
;
oracle_namespace
: id_expression
;
//https://docs.oracle.com/cd/E11882_01/server.112/e41084/statements_5001.htm#SQLRF01201
create_cluster
: CREATE CLUSTER cluster_name '(' column_name datatype SORT? (',' column_name datatype SORT?)* ')'
( physical_attributes_clause
| SIZE size_clause
| TABLESPACE tablespace
| INDEX
| (SINGLE TABLE)? HASHKEYS UNSIGNED_INTEGER (HASH IS expression)?
)*
parallel_clause? (ROWDEPENDENCIES | NOROWDEPENDENCIES)?
(CACHE | NOCACHE)?
';'
;
create_table
: CREATE (GLOBAL TEMPORARY)? TABLE tableview_name
(relational_table | object_table | xmltype_table) (AS select_only_statement)?
';'
;
xmltype_table
: OF XMLTYPE ('(' object_properties ')')?
(XMLTYPE xmltype_storage)? xmlschema_spec? xmltype_virtual_columns?
(ON COMMIT (DELETE | PRESERVE) ROWS)? oid_clause? oid_index_clause?
physical_properties? column_properties? table_partitioning_clauses?
(CACHE | NOCACHE)? (RESULT_CACHE '(' MODE (DEFAULT | FORCE) ')')?
parallel_clause? (ROWDEPENDENCIES | NOROWDEPENDENCIES)?
(enable_disable_clause+)? row_movement_clause?
flashback_archive_clause?
;
xmltype_virtual_columns
: VIRTUAL COLUMNS '(' column_name AS '(' expression ')' (',' column_name AS '(' expression ')')* ')'
;
xmltype_column_properties
: XMLTYPE COLUMN? column_name xmltype_storage? xmlschema_spec?
;
xmltype_storage
: STORE AS (OBJECT RELATIONAL
| (SECUREFILE | BASICFILE)? (CLOB | BINARY XML) (lob_segname ('(' lob_parameters ')')? | '(' lob_parameters ')')?
)
| STORE VARRAYS AS (LOBS | TABLES)
;
xmlschema_spec
: (XMLSCHEMA DELIMITED_ID)? ELEMENT DELIMITED_ID
(allow_or_disallow NONSCHEMA)?
(allow_or_disallow ANYSCHEMA)?
;
object_table
: OF type_name object_table_substitution?
('(' object_properties (',' object_properties)* ')')?
(ON COMMIT (DELETE | PRESERVE) ROWS)? oid_clause? oid_index_clause?
physical_properties? column_properties? table_partitioning_clauses?
(CACHE | NOCACHE)? (RESULT_CACHE '(' MODE (DEFAULT | FORCE) ')')?
parallel_clause? (ROWDEPENDENCIES | NOROWDEPENDENCIES)?
(enable_disable_clause+)? row_movement_clause? flashback_archive_clause?
;
oid_index_clause
: OIDINDEX index_name? '(' (physical_attributes_clause | TABLESPACE tablespace)+ ')'
;
oid_clause
: OBJECT IDENTIFIER IS (SYSTEM GENERATED | PRIMARY KEY)
;
object_properties
: (column_name | attribute_name) (DEFAULT expression)? (inline_constraint (',' inline_constraint)* | inline_ref_constraint)?
| out_of_line_constraint
| out_of_line_ref_constraint
| supplemental_logging_props
;
object_table_substitution
: NOT? SUBSTITUTABLE AT ALL LEVELS
;
relational_table
: ('(' relational_property (',' relational_property)* ')')?
(ON COMMIT (DELETE | PRESERVE) ROWS)?
physical_properties? column_properties? table_partitioning_clauses?
(CACHE | NOCACHE)? (RESULT_CACHE '(' MODE (DEFAULT | FORCE) ')')?
parallel_clause?
(ROWDEPENDENCIES | NOROWDEPENDENCIES)?
(enable_disable_clause+)? row_movement_clause? flashback_archive_clause?
;
relational_property
: (column_definition
| virtual_column_definition
| out_of_line_constraint
| out_of_line_ref_constraint
| supplemental_logging_props
)
;
table_partitioning_clauses
: range_partitions
| list_partitions
| hash_partitions
| composite_range_partitions
| composite_list_partitions
| composite_hash_partitions
| reference_partitioning
| system_partitioning
;
range_partitions
: PARTITION BY RANGE '(' column_name (',' column_name)* ')'
(INTERVAL '(' expression ')' (STORE IN '(' tablespace (',' tablespace)* ')' )? )?
'(' PARTITION partition_name? range_values_clause table_partition_description (',' PARTITION partition_name? range_values_clause table_partition_description)* ')'
;
list_partitions
: PARTITION BY LIST '(' column_name ')'
'(' PARTITION partition_name? list_values_clause table_partition_description (',' PARTITION partition_name? list_values_clause table_partition_description )* ')'
;
hash_partitions
: PARTITION BY HASH '(' column_name (',' column_name)* ')'
(individual_hash_partitions | hash_partitions_by_quantity)
;
individual_hash_partitions
: '(' PARTITION partition_name? partitioning_storage_clause? (',' PARTITION partition_name? partitioning_storage_clause?)* ')'
;
hash_partitions_by_quantity
: PARTITIONS hash_partition_quantity
(STORE IN '(' tablespace (',' tablespace)* ')')?
(table_compression | key_compression)?
(OVERFLOW STORE IN '(' tablespace (',' tablespace)* ')' )?
;
hash_partition_quantity
: UNSIGNED_INTEGER
;
composite_range_partitions
: PARTITION BY RANGE '(' column_name (',' column_name)* ')'
(INTERVAL '(' expression ')' (STORE IN '(' tablespace (',' tablespace)* ')' )? )?
(subpartition_by_range | subpartition_by_list | subpartition_by_hash)
'(' range_partition_desc (',' range_partition_desc)* ')'
;
composite_list_partitions
: PARTITION BY LIST '(' column_name ')'
(subpartition_by_range | subpartition_by_list | subpartition_by_hash)
'(' list_partition_desc (',' list_partition_desc)* ')'
;
composite_hash_partitions
: PARTITION BY HASH '(' (',' column_name)+ ')'
(subpartition_by_range | subpartition_by_list | subpartition_by_hash)
(individual_hash_partitions | hash_partitions_by_quantity)
;
reference_partitioning
: PARTITION BY REFERENCE '(' regular_id ')'
('(' reference_partition_desc (',' reference_partition_desc)* ')')?
;
reference_partition_desc
: PARTITION partition_name? table_partition_description
;
system_partitioning
: PARTITION BY SYSTEM
(PARTITIONS UNSIGNED_INTEGER | reference_partition_desc (',' reference_partition_desc)*)?
;
range_partition_desc
: PARTITION partition_name? range_values_clause table_partition_description
( ( '(' ( range_subpartition_desc (',' range_subpartition_desc)*
| list_subpartition_desc (',' list_subpartition_desc)*
| individual_hash_subparts (',' individual_hash_subparts)*
)
')'
| hash_subparts_by_quantity
)
)?
;
list_partition_desc
: PARTITION partition_name? list_values_clause table_partition_description
( ( '(' ( range_subpartition_desc (',' range_subpartition_desc)*
| list_subpartition_desc (',' list_subpartition_desc)*
| individual_hash_subparts (',' individual_hash_subparts)*
)
')'
| hash_subparts_by_quantity
)
)?
;
subpartition_template
: SUBPARTITION TEMPLATE
( ( '(' ( range_subpartition_desc (',' range_subpartition_desc)*
| list_subpartition_desc (',' list_subpartition_desc)*
| individual_hash_subparts (',' individual_hash_subparts)*
)
')'
| hash_subpartition_quantity
)
)
;
hash_subpartition_quantity
: UNSIGNED_INTEGER
;
subpartition_by_range
: SUBPARTITION BY RANGE '(' column_name (',' column_name)* ')' subpartition_template?
;
subpartition_by_list
: SUBPARTITION BY LIST '(' column_name ')' subpartition_template?
;
subpartition_by_hash
: SUBPARTITION BY HASH '(' column_name (',' column_name)* ')'
(SUBPARTITIONS UNSIGNED_INTEGER (STORE IN '(' tablespace (',' tablespace)* ')' )?
| subpartition_template
)?
;
subpartition_name
: partition_name
;
range_subpartition_desc
: SUBPARTITION subpartition_name? range_values_clause partitioning_storage_clause?
;
list_subpartition_desc
: SUBPARTITION subpartition_name? list_values_clause partitioning_storage_clause?
;
individual_hash_subparts
: SUBPARTITION subpartition_name? partitioning_storage_clause?
;
hash_subparts_by_quantity
: SUBPARTITIONS UNSIGNED_INTEGER (STORE IN '(' tablespace (',' tablespace)* ')' )?
;
range_values_clause
: VALUES LESS THAN '(' literal (',' literal)* ')'
;
list_values_clause
: VALUES '(' (literal (',' literal)* | DEFAULT) ')'
;
table_partition_description
: deferred_segment_creation? segment_attributes_clause?
(table_compression | key_compression)?
(OVERFLOW segment_attributes_clause? )?
(lob_storage_clause | varray_col_properties | nested_table_col_properties)?
;
partitioning_storage_clause
: ( TABLESPACE tablespace
| OVERFLOW (TABLESPACE tablespace)?
| table_compression
| key_compression
| lob_partitioning_storage
| VARRAY varray_item STORE AS (BASICFILE | SECUREFILE)? LOB lob_segname
)+
;
lob_partitioning_storage
: LOB '(' lob_item ')'
STORE AS (BASICFILE | SECUREFILE)?
(lob_segname ('(' TABLESPACE tablespace ')' )?
| '(' TABLESPACE tablespace ')'
)
;
//Technically, this should only allow 'K' | 'M' | 'G' | 'T' | 'P' | 'E'
// but having issues with examples/numbers01.sql line 11 "sysdate -1m"
size_clause
: UNSIGNED_INTEGER REGULAR_ID?
;
table_compression
: COMPRESS
( BASIC
| FOR ( OLTP
| (QUERY | ARCHIVE) (LOW | HIGH)?
)
)?
| NOCOMPRESS
;
physical_attributes_clause
: (PCTFREE pctfree=UNSIGNED_INTEGER
| PCTUSED pctused=UNSIGNED_INTEGER
| INITRANS inittrans=UNSIGNED_INTEGER
| storage_clause
)+
;
storage_clause
: STORAGE '('
(INITIAL initial_size=size_clause
| NEXT next_size=size_clause
| MINEXTENTS minextents=(UNSIGNED_INTEGER | UNLIMITED)
| MAXEXTENTS minextents=(UNSIGNED_INTEGER | UNLIMITED)
| PCTINCREASE pctincrease=UNSIGNED_INTEGER
| FREELISTS freelists=UNSIGNED_INTEGER
| FREELIST GROUPS freelist_groups=UNSIGNED_INTEGER
| OPTIMAL (size_clause | NULL_ )
| BUFFER_POOL (KEEP | RECYCLE | DEFAULT)
| FLASH_CACHE (KEEP | NONE | DEFAULT)
| ENCRYPT
)+
')'
;
deferred_segment_creation
: SEGMENT CREATION (IMMEDIATE | DEFERRED)
;
segment_attributes_clause
: ( physical_attributes_clause
| TABLESPACE tablespace_name=id_expression
| logging_clause
)+
;
physical_properties
: deferred_segment_creation? segment_attributes_clause table_compression?
;
row_movement_clause
: (ENABLE | DISABLE)? ROW MOVEMENT
;
flashback_archive_clause
: FLASHBACK ARCHIVE flashback_archive=REGULAR_ID
| NO FLASHBACK ARCHIVE
;
log_grp
: UNSIGNED_INTEGER
;
supplemental_table_logging
: ADD SUPPLEMENTAL LOG (supplemental_log_grp_clause | supplemental_id_key_clause)
(',' SUPPLEMENTAL LOG (supplemental_log_grp_clause | supplemental_id_key_clause) )*
| DROP SUPPLEMENTAL LOG (supplemental_id_key_clause | GROUP log_grp)
(',' SUPPLEMENTAL LOG (supplemental_id_key_clause | GROUP log_grp) )*
;
supplemental_log_grp_clause
: GROUP log_grp '(' regular_id (NO LOG)? (',' regular_id (NO LOG)?)* ')' ALWAYS?
;
supplemental_id_key_clause
: DATA '('( ','? ( ALL
| PRIMARY KEY
| UNIQUE
| FOREIGN KEY
)
)+
')'
COLUMNS
;
allocate_extent_clause
: ALLOCATE EXTENT
( '(' ( SIZE size_clause
| DATAFILE datafile=CHAR_STRING
| INSTANCE inst_num=UNSIGNED_INTEGER
)+
')'
)?
;
deallocate_unused_clause
: DEALLOCATE UNUSED (KEEP size_clause)?
;
shrink_clause
: SHRINK SPACE_KEYWORD COMPACT? CASCADE?
;
records_per_block_clause
: (MINIMIZE | NOMINIMIZE)? RECORDS_PER_BLOCK
;
upgrade_table_clause
: UPGRADE (NOT? INCLUDING DATA) column_properties
;
drop_table
: DROP TABLE tableview_name PURGE? SEMICOLON
;
drop_view
: DROP VIEW tableview_name (CASCADE CONSTRAINT)? SEMICOLON
;
comment_on_column
: COMMENT ON COLUMN column_name IS quoted_string
;
enable_or_disable
: ENABLE
| DISABLE
;
allow_or_disallow
: ALLOW
| DISALLOW
;
// Synonym DDL Clauses
create_synonym
// Synonym's schema cannot be specified for public synonyms
: CREATE (OR REPLACE)? PUBLIC SYNONYM synonym_name FOR (schema_name PERIOD)? schema_object_name (AT_SIGN link_name)?
| CREATE (OR REPLACE)? SYNONYM (schema_name PERIOD)? synonym_name FOR (schema_name PERIOD)? schema_object_name (AT_SIGN link_name)?
;
comment_on_table
: COMMENT ON TABLE tableview_name IS quoted_string
;
alter_cluster
: ALTER CLUSTER cluster_name
( physical_attributes_clause
| SIZE size_clause
| allocate_extent_clause
| deallocate_unused_clause
| cache_or_nocache
)+
parallel_clause?
';'
;
cache_or_nocache
: CACHE
| NOCACHE
;
database_name
: regular_id
;
alter_database
: ALTER DATABASE database_name?
( startup_clauses
| recovery_clauses
| database_file_clauses
| logfile_clauses
| controlfile_clauses
| standby_database_clauses
| default_settings_clause
| instance_clauses
| security_clause
)
';'
;
startup_clauses
: MOUNT ((STANDBY | CLONE) DATABASE)?
| OPEN (READ WRITE)? resetlogs_or_noresetlogs? upgrade_or_downgrade?
| OPEN READ ONLY
;
resetlogs_or_noresetlogs
: RESETLOGS
| NORESETLOGS
;
upgrade_or_downgrade
: UPGRADE
| DOWNGRADE
;
recovery_clauses
: general_recovery
| managed_standby_recovery
| begin_or_end BACKUP
;
begin_or_end
: BEGIN
| END
;
general_recovery
: RECOVER AUTOMATIC? (FROM CHAR_STRING)?
( (full_database_recovery | partial_database_recovery | LOGFILE CHAR_STRING )?
((TEST | ALLOW UNSIGNED_INTEGER CORRUPTION | parallel_clause)+ )?
| CONTINUE DEFAULT?
| CANCEL
)
;
//Need to come back to
full_database_recovery
: STANDBY? DATABASE
((UNTIL (CANCEL |TIME CHAR_STRING | CHANGE UNSIGNED_INTEGER | CONSISTENT)
| USING BACKUP CONTROLFILE
)+
)?
;
partial_database_recovery
: TABLESPACE tablespace (',' tablespace)*
| DATAFILE CHAR_STRING | filenumber (',' CHAR_STRING | filenumber)*
| partial_database_recovery_10g
;
partial_database_recovery_10g
: {this.isVersion10()}? STANDBY
( TABLESPACE tablespace (',' tablespace)*
| DATAFILE CHAR_STRING | filenumber (',' CHAR_STRING | filenumber)*
)
UNTIL (CONSISTENT WITH)? CONTROLFILE
;
managed_standby_recovery
: RECOVER (MANAGED STANDBY DATABASE
((USING CURRENT LOGFILE
| DISCONNECT (FROM SESSION)?
| NODELAY
| UNTIL CHANGE UNSIGNED_INTEGER
| UNTIL CONSISTENT
| parallel_clause
)+
| FINISH
| CANCEL
)?
| TO LOGICAL STANDBY (db_name | KEEP IDENTITY)
)
;
db_name
: regular_id
;
database_file_clauses
: RENAME FILE filename (',' filename)* TO filename
| create_datafile_clause
| alter_datafile_clause
| alter_tempfile_clause
;
create_datafile_clause
: CREATE DATAFILE (filename | filenumber) (',' (filename | filenumber) )*
(AS (NEW) )?
;
alter_datafile_clause
: DATAFILE (filename|filenumber) (',' (filename|filenumber) )*
( ONLINE
| OFFLINE (FOR DROP)?
| RESIZE size_clause
| autoextend_clause
| END BACKUP
)
;
alter_tempfile_clause
: TEMPFILE (filename | filenumber) (',' (filename | filenumber) )*
( RESIZE size_clause
| autoextend_clause
| DROP (INCLUDING DATAFILES)
| ONLINE
| OFFLINE
)
;
logfile_clauses
: (ARCHIVELOG MANUAL? | NOARCHIVELOG)
| NO? FORCE LOGGING
| RENAME FILE filename (',' filename)* TO filename
| CLEAR UNARCHIVED? LOGFILE logfile_descriptor (',' logfile_descriptor)* (UNRECOVERABLE DATAFILE)?
| add_logfile_clauses
| drop_logfile_clauses
| switch_logfile_clause
| supplemental_db_logging
;
add_logfile_clauses
: ADD STANDBY? LOGFILE
(
//TODO (INSTANCE CHAR_STRING | THREAD UNSIGNED_INTEGER)?
(log_file_group redo_log_file_spec)+
| MEMBER filename REUSE? (',' filename REUSE?)* TO logfile_descriptor (',' logfile_descriptor)*
)
;
log_file_group
:(','? (THREAD UNSIGNED_INTEGER)? GROUP UNSIGNED_INTEGER)
;
drop_logfile_clauses
: DROP STANDBY?
LOGFILE (logfile_descriptor (',' logfile_descriptor)*
| MEMBER filename (',' filename)*
)
;
switch_logfile_clause
: SWITCH ALL LOGFILES TO BLOCKSIZE UNSIGNED_INTEGER
;
supplemental_db_logging
: add_or_drop
SUPPLEMENTAL LOG (DATA
| supplemental_id_key_clause
| supplemental_plsql_clause
)
;
add_or_drop
: ADD
| DROP
;
supplemental_plsql_clause
: DATA FOR PROCEDURAL REPLICATION
;
logfile_descriptor
: GROUP UNSIGNED_INTEGER
| '(' filename (',' filename)* ')'
| filename
;
controlfile_clauses
: CREATE (LOGICAL | PHYSICAL)? STANDBY CONTROLFILE AS filename REUSE?
| BACKUP CONTROLFILE TO (filename REUSE? | trace_file_clause)
;
trace_file_clause
: TRACE (AS filename REUSE?)? (RESETLOGS|NORESETLOGS)?
;
standby_database_clauses
: ( activate_standby_db_clause
| maximize_standby_db_clause
| register_logfile_clause
| commit_switchover_clause
| start_standby_clause
| stop_standby_clause
| convert_database_clause
)
parallel_clause?
;
activate_standby_db_clause
: ACTIVATE (PHYSICAL | LOGICAL)? STANDBY DATABASE (FINISH APPLY)?
;
maximize_standby_db_clause
: SET STANDBY DATABASE TO MAXIMIZE (PROTECTION | AVAILABILITY | PERFORMANCE)
;
register_logfile_clause
: REGISTER (OR REPLACE)? (PHYSICAL | LOGICAL) LOGFILE //TODO (','? file_specification)+
//TODO (FOR logminer_session_name)?
;
commit_switchover_clause
: (PREPARE | COMMIT) TO SWITCHOVER
((TO (((PHYSICAL | LOGICAL)? PRIMARY | PHYSICAL? STANDBY)
((WITH | WITHOUT)? SESSION SHUTDOWN (WAIT | NOWAIT) )?
| LOGICAL STANDBY
)
| LOGICAL STANDBY
)
| CANCEL
)?
;
start_standby_clause
: START LOGICAL STANDBY APPLY IMMEDIATE? NODELAY?
( NEW PRIMARY regular_id
| INITIAL scn_value=UNSIGNED_INTEGER?
| SKIP_ FAILED TRANSACTION
| FINISH
)?
;
stop_standby_clause
: (STOP | ABORT) LOGICAL STANDBY APPLY
;
convert_database_clause
: CONVERT TO (PHYSICAL | SNAPSHOT) STANDBY
;
default_settings_clause
: DEFAULT EDITION EQUALS_OP edition_name
| SET DEFAULT (BIGFILE | SMALLFILE) TABLESPACE
| DEFAULT TABLESPACE tablespace
| DEFAULT TEMPORARY TABLESPACE (tablespace | tablespace_group_name)
| RENAME GLOBAL_NAME TO database ('.' domain)+
| ENABLE BLOCK CHANGE TRACKING (USING FILE filename REUSE?)?
| DISABLE BLOCK CHANGE TRACKING
| flashback_mode_clause
| set_time_zone_clause
;
set_time_zone_clause
: SET TIMEZONE EQUALS_OP CHAR_STRING
;
instance_clauses
: enable_or_disable INSTANCE CHAR_STRING
;
security_clause
: GUARD (ALL | STANDBY | NONE)
;
domain
: regular_id
;
database
: regular_id
;
edition_name
: regular_id
;
filenumber
: UNSIGNED_INTEGER
;
filename
: CHAR_STRING
;
alter_table
: ALTER TABLE tableview_name
(
| alter_table_properties
| constraint_clauses
| column_clauses
//TODO | alter_table_partitioning
//TODO | alter_external_table
| move_table_clause
)
((enable_disable_clause | enable_or_disable (TABLE LOCK | ALL TRIGGERS) )+)?
';'
;
alter_table_properties
: alter_table_properties_1
| RENAME TO tableview_name
| shrink_clause
| READ ONLY
| READ WRITE
| REKEY CHAR_STRING
;
alter_table_properties_1
: ( physical_attributes_clause
| logging_clause
| table_compression
| supplemental_table_logging
| allocate_extent_clause
| deallocate_unused_clause
| (CACHE | NOCACHE)
| RESULT_CACHE '(' MODE (DEFAULT | FORCE) ')'
| upgrade_table_clause
| records_per_block_clause
| parallel_clause
| row_movement_clause
| flashback_archive_clause
)+
alter_iot_clauses?
;
alter_iot_clauses
: index_org_table_clause
| alter_overflow_clause
| alter_mapping_table_clause
| COALESCE
;
alter_mapping_table_clause
: MAPPING TABLE (allocate_extent_clause | deallocate_unused_clause)
;
alter_overflow_clause
: add_overflow_clause
| OVERFLOW (segment_attributes_clause | allocate_extent_clause | shrink_clause | deallocate_unused_clause)+
;
add_overflow_clause
: ADD OVERFLOW segment_attributes_clause? ('(' PARTITION segment_attributes_clause? (',' PARTITION segment_attributes_clause?)* ')' )?
;
enable_disable_clause
: (ENABLE | DISABLE) (VALIDATE | NOVALIDATE)?
(UNIQUE '(' column_name (',' column_name)* ')'
| PRIMARY KEY
| CONSTRAINT constraint_name
) using_index_clause? exceptions_clause?
CASCADE? ((KEEP | DROP) INDEX)?
;
using_index_clause
: USING INDEX (index_name | '(' create_index ')' | index_attributes )?
;
index_attributes
: ( physical_attributes_clause
| logging_clause
| TABLESPACE (tablespace | DEFAULT)
| key_compression
| sort_or_nosort
| REVERSE
| visible_or_invisible
| parallel_clause
)+
;
sort_or_nosort
: SORT
| NOSORT
;
exceptions_clause
: EXCEPTIONS INTO tableview_name
;
move_table_clause
: MOVE ONLINE? segment_attributes_clause? table_compression? index_org_table_clause? ((lob_storage_clause | varray_col_properties)+)? parallel_clause?
;
index_org_table_clause
: (mapping_table_clause | PCTTHRESHOLD UNSIGNED_INTEGER | key_compression) index_org_overflow_clause?
;
mapping_table_clause
: MAPPING TABLE
| NOMAPPING
;
key_compression
: NOCOMPRESS
| COMPRESS UNSIGNED_INTEGER
;
index_org_overflow_clause
: (INCLUDING column_name)? OVERFLOW segment_attributes_clause?
;
column_clauses
: add_modify_drop_column_clauses
| rename_column_clause
| modify_collection_retrieval
| modify_lob_storage_clause
;
modify_collection_retrieval
: MODIFY NESTED TABLE collection_item RETURN AS (LOCATOR | VALUE)
;
collection_item
: tableview_name
;
rename_column_clause
: RENAME COLUMN old_column_name TO new_column_name
;
old_column_name
: column_name
;
new_column_name
: column_name
;
add_modify_drop_column_clauses
: (add_column_clause
|modify_column_clauses
|drop_column_clause
)+
;
drop_column_clause
: SET UNUSED (COLUMN column_name| ('(' column_name (',' column_name)* ')' )) (CASCADE CONSTRAINTS | INVALIDATE)*
| DROP (COLUMN column_name | '(' column_name (',' column_name)* ')' ) (CASCADE CONSTRAINTS | INVALIDATE)* (CHECKPOINT UNSIGNED_INTEGER)?
| DROP (UNUSED COLUMNS | COLUMNS CONTINUE) (CHECKPOINT UNSIGNED_INTEGER)
;
modify_column_clauses
: MODIFY ('(' modify_col_properties (',' modify_col_properties)* ')'
| modify_col_properties
| modify_col_substitutable
)
;
modify_col_properties
: column_name datatype? (DEFAULT expression)? (ENCRYPT encryption_spec | DECRYPT)? inline_constraint* lob_storage_clause? //TODO alter_xmlschema_clause
;
modify_col_substitutable
: COLUMN column_name NOT? SUBSTITUTABLE AT ALL LEVELS FORCE?
;
add_column_clause
: ADD ('(' (column_definition | virtual_column_definition) (',' (column_definition
| virtual_column_definition)
)*
')'
| ( column_definition | virtual_column_definition ))
column_properties?
;
varray_col_properties
: VARRAY varray_item ( substitutable_column_clause? varray_storage_clause
| substitutable_column_clause
)
;
varray_storage_clause
: STORE AS (SECUREFILE|BASICFILE)? LOB ( lob_segname? '(' lob_storage_parameters ')'
| lob_segname
)
;
lob_segname
: regular_id
;
lob_item
: regular_id
;
lob_storage_parameters
: TABLESPACE tablespace | (lob_parameters storage_clause? )
| storage_clause
;
lob_storage_clause
: LOB ( '(' lob_item (',' lob_item)* ')' STORE AS ( (SECUREFILE|BASICFILE) | '(' lob_storage_parameters ')' )+
| '(' lob_item ')' STORE AS ( (SECUREFILE | BASICFILE) | lob_segname | '(' lob_storage_parameters ')' )+
)
;
modify_lob_storage_clause
: MODIFY LOB '(' lob_item ')' '(' modify_lob_parameters ')'
;
modify_lob_parameters
: ( storage_clause
| (PCTVERSION | FREEPOOLS) UNSIGNED_INTEGER
| REBUILD FREEPOOLS
| lob_retention_clause
| lob_deduplicate_clause
| lob_compression_clause
| ENCRYPT encryption_spec
| DECRYPT
| CACHE
| (CACHE | NOCACHE | CACHE READS) logging_clause?
| allocate_extent_clause
| shrink_clause
| deallocate_unused_clause
)+
;
lob_parameters
: ( (ENABLE | DISABLE) STORAGE IN ROW
| CHUNK UNSIGNED_INTEGER
| PCTVERSION UNSIGNED_INTEGER
| FREEPOOLS UNSIGNED_INTEGER
| lob_retention_clause
| lob_deduplicate_clause
| lob_compression_clause
| ENCRYPT encryption_spec
| DECRYPT
| (CACHE | NOCACHE | CACHE READS) logging_clause?
)+
;
lob_deduplicate_clause
: DEDUPLICATE
| KEEP_DUPLICATES
;
lob_compression_clause
: NOCOMPRESS
| COMPRESS (HIGH | MEDIUM | LOW)?
;
lob_retention_clause
: RETENTION (MAX | MIN UNSIGNED_INTEGER | AUTO | NONE)?
;
encryption_spec
: (USING CHAR_STRING)? (IDENTIFIED BY REGULAR_ID)? CHAR_STRING? (NO? SALT)?
;
tablespace
: regular_id
;
varray_item
: (id_expression '.')? (id_expression '.')? id_expression
;
column_properties
: object_type_col_properties
| nested_table_col_properties
| (varray_col_properties | lob_storage_clause) //TODO '(' ( ','? lob_partition_storage)+ ')'
| xmltype_column_properties
;
column_definition
: column_name (datatype | type_name)
SORT? (DEFAULT expression)? (ENCRYPT (USING CHAR_STRING)? (IDENTIFIED BY regular_id)? CHAR_STRING? (NO? SALT)? )? (inline_constraint* | inline_ref_constraint)
;
virtual_column_definition
: column_name datatype? autogenerated_sequence_definition?
VIRTUAL? inline_constraint*
;
autogenerated_sequence_definition
: GENERATED (ALWAYS | BY DEFAULT (ON NULL_)?)? AS IDENTITY
;
nested_table_col_properties
: NESTED TABLE (nested_item | COLUMN_VALUE) substitutable_column_clause? (LOCAL | GLOBAL)?
STORE AS tableview_name ( '(' ( '(' object_properties ')'
| physical_properties
| column_properties
)+
')'
)?
(RETURN AS? (LOCATOR | VALUE) )?
;
nested_item
: regular_id
;
substitutable_column_clause
: ELEMENT? IS OF TYPE? '(' type_name ')'
| NOT? SUBSTITUTABLE AT ALL LEVELS
;
partition_name
: regular_id
;
supplemental_logging_props
: SUPPLEMENTAL LOG (supplemental_log_grp_clause | supplemental_id_key_clause)
;
object_type_col_properties
: COLUMN column=regular_id substitutable_column_clause
;
constraint_clauses
: ADD '(' (out_of_line_constraint* | out_of_line_ref_constraint) ')'
| ADD (out_of_line_constraint* | out_of_line_ref_constraint)
| MODIFY (CONSTRAINT constraint_name | PRIMARY KEY | UNIQUE '(' column_name (',' column_name)* ')') constraint_state CASCADE?
| RENAME CONSTRAINT old_constraint_name TO new_constraint_name
| drop_constraint_clause+
;
old_constraint_name
: constraint_name
;
new_constraint_name
: constraint_name
;
drop_constraint_clause
: DROP drop_primary_key_or_unique_or_generic_clause
;
drop_primary_key_or_unique_or_generic_clause
: (PRIMARY KEY | UNIQUE '(' column_name (',' column_name)* ')') CASCADE? (KEEP | DROP)?
| CONSTRAINT constraint_name CASCADE?
;
check_constraint
: CHECK '(' condition ')' DISABLE?
;
foreign_key_clause
: FOREIGN KEY paren_column_list references_clause on_delete_clause?
;
references_clause
: REFERENCES tableview_name paren_column_list
;
on_delete_clause
: ON DELETE (CASCADE | SET NULL_)
;
// Anonymous PL/SQL code block
anonymous_block
: (DECLARE seq_of_declare_specs)? BEGIN seq_of_statements (EXCEPTION exception_handler+)? END SEMICOLON
;
// Common DDL Clauses
invoker_rights_clause
: AUTHID (CURRENT_USER | DEFINER)
;
call_spec
: LANGUAGE (java_spec | c_spec)
;
// Call Spec Specific Clauses
java_spec
: JAVA NAME CHAR_STRING
;
c_spec
: C_LETTER (NAME CHAR_STRING)? LIBRARY identifier c_agent_in_clause? (WITH CONTEXT)? c_parameters_clause?
;
c_agent_in_clause
: AGENT IN '(' expressions ')'
;
c_parameters_clause
: PARAMETERS '(' (expressions | '.' '.' '.') ')'
;
parameter
: parameter_name (IN | OUT | INOUT | NOCOPY)* type_spec? default_value_part?
;
default_value_part
: (ASSIGN_OP | DEFAULT) expression
;
// Elements Declarations
seq_of_declare_specs
: declare_spec+
;
declare_spec
: pragma_declaration
| variable_declaration
| subtype_declaration
| cursor_declaration
| exception_declaration
| type_declaration
| procedure_spec
| function_spec
| procedure_body
| function_body
;
// incorporates constant_declaration
variable_declaration
: identifier CONSTANT? type_spec (NOT NULL_)? default_value_part? ';'
;
subtype_declaration
: SUBTYPE identifier IS type_spec (RANGE expression '..' expression)? (NOT NULL_)? ';'
;
// cursor_declaration incorportates curscursor_body and cursor_spec
cursor_declaration
: CURSOR identifier ('(' parameter_spec (',' parameter_spec)* ')' )? (RETURN type_spec)? (IS select_statement)? ';'
;
parameter_spec
: parameter_name (IN? type_spec)? default_value_part?
;
exception_declaration
: identifier EXCEPTION ';'
;
pragma_declaration
: PRAGMA (SERIALLY_REUSABLE
| AUTONOMOUS_TRANSACTION
| EXCEPTION_INIT '(' exception_name ',' numeric_negative ')'
| INLINE '(' id1=identifier ',' expression ')'
| RESTRICT_REFERENCES '(' (identifier | DEFAULT) (',' identifier)+ ')') ';'
;
// Record Declaration Specific Clauses
// incorporates ref_cursor_type_definition
record_type_def
: RECORD '(' field_spec (',' field_spec)* ')'
;
field_spec
: column_name type_spec? (NOT NULL_)? default_value_part?
;
ref_cursor_type_def
: REF CURSOR (RETURN type_spec)?
;
type_declaration
: TYPE identifier IS (table_type_def | varray_type_def | record_type_def | ref_cursor_type_def) ';'
;
table_type_def
: TABLE OF type_spec table_indexed_by_part? (NOT NULL_)?
;
table_indexed_by_part
: (idx1=INDEXED | idx2=INDEX) BY type_spec
;
varray_type_def
: (VARRAY | VARYING ARRAY) '(' expression ')' OF type_spec (NOT NULL_)?
;
// Statements
seq_of_statements
: (statement (';' | EOF) | label_declaration)+
;
label_declaration
: ltp1= '<' '<' label_name '>' '>'
;
statement
: body
| block
| assignment_statement
| continue_statement
| exit_statement
| goto_statement
| if_statement
| loop_statement
| forall_statement
| null_statement
| raise_statement
| return_statement
| case_statement
| sql_statement
| function_call
| pipe_row_statement
| procedure_call
;
assignment_statement
: (general_element | bind_variable) ASSIGN_OP expression
;
continue_statement
: CONTINUE label_name? (WHEN condition)?
;
exit_statement
: EXIT label_name? (WHEN condition)?
;
goto_statement
: GOTO label_name
;
if_statement
: IF condition THEN seq_of_statements elsif_part* else_part? END IF
;
elsif_part
: ELSIF condition THEN seq_of_statements
;
else_part
: ELSE seq_of_statements
;
loop_statement
: label_declaration? (WHILE condition | FOR cursor_loop_param)? LOOP seq_of_statements END LOOP label_name?
;
// Loop Specific Clause
cursor_loop_param
: index_name IN REVERSE? lower_bound range_separator='..' upper_bound
| record_name IN (cursor_name ('(' expressions? ')')? | '(' select_statement ')')
;
forall_statement
: FORALL index_name IN bounds_clause sql_statement (SAVE EXCEPTIONS)?
;
bounds_clause
: lower_bound '..' upper_bound
| INDICES OF collection_name between_bound?
| VALUES OF index_name
;
between_bound
: BETWEEN lower_bound AND upper_bound
;
lower_bound
: concatenation
;
upper_bound
: concatenation
;
null_statement
: NULL_
;
raise_statement
: RAISE exception_name?
;
return_statement
: RETURN expression?
;
function_call
: CALL? routine_name function_argument?
;
procedure_call
: routine_name function_argument?
;
pipe_row_statement
: PIPE ROW '(' expression ')';
body
: BEGIN seq_of_statements (EXCEPTION exception_handler+)? END label_name?
;
// Body Specific Clause
exception_handler
: WHEN exception_name (OR exception_name)* THEN seq_of_statements
;
trigger_block
: (DECLARE? declare_spec+)? body
;
block
: DECLARE? declare_spec+ body
;
// SQL Statements
sql_statement
: execute_immediate
| data_manipulation_language_statements
| cursor_manipulation_statements
| transaction_control_statements
;
execute_immediate
: EXECUTE IMMEDIATE expression (into_clause using_clause? | using_clause dynamic_returning_clause? | dynamic_returning_clause)?
;
// Execute Immediate Specific Clause
dynamic_returning_clause
: (RETURNING | RETURN) into_clause
;
// DML Statements
data_manipulation_language_statements
: merge_statement
| lock_table_statement
| select_statement
| update_statement
| delete_statement
| insert_statement
| explain_statement
;
// Cursor Manipulation Statements
cursor_manipulation_statements
: close_statement
| open_statement
| fetch_statement
| open_for_statement
;
close_statement
: CLOSE cursor_name
;
open_statement
: OPEN cursor_name ('(' expressions? ')')?
;
fetch_statement
: FETCH cursor_name (it1=INTO variable_name (',' variable_name)* | BULK COLLECT INTO variable_name (',' variable_name)*)
;
open_for_statement
: OPEN variable_name FOR (select_statement | expression) using_clause?
;
// Transaction Control SQL Statements
transaction_control_statements
: set_transaction_command
| set_constraint_command
| commit_statement
| rollback_statement
| savepoint_statement
;
set_transaction_command
: SET TRANSACTION
(READ (ONLY | WRITE) | ISOLATION LEVEL (SERIALIZABLE | READ COMMITTED) | USE ROLLBACK SEGMENT rollback_segment_name)?
(NAME quoted_string)?
;
set_constraint_command
: SET (CONSTRAINT | CONSTRAINTS) (ALL | constraint_name (',' constraint_name)*) (IMMEDIATE | DEFERRED)
;
commit_statement
: COMMIT WORK?
(COMMENT expression | FORCE (CORRUPT_XID expression | CORRUPT_XID_ALL | expression (',' expression)?))?
write_clause?
;
write_clause
: WRITE (WAIT | NOWAIT)? (IMMEDIATE | BATCH)?
;
rollback_statement
: ROLLBACK WORK? (TO SAVEPOINT? savepoint_name | FORCE quoted_string)?
;
savepoint_statement
: SAVEPOINT savepoint_name
;
// Dml
/* TODO
//SHOULD BE OVERRIDEN!
compilation_unit
: seq_of_statements* EOF
;
//SHOULD BE OVERRIDEN!
seq_of_statements
: select_statement
| update_statement
| delete_statement
| insert_statement
| lock_table_statement
| merge_statement
| explain_statement
// | case_statement[true]
;
*/
explain_statement
: EXPLAIN PLAN (SET STATEMENT_ID '=' quoted_string)? (INTO tableview_name)?
FOR (select_statement | update_statement | delete_statement | insert_statement | merge_statement)
;
select_only_statement
: subquery_factoring_clause? subquery
;
select_statement
: select_only_statement (for_update_clause | order_by_clause | offset_clause | fetch_clause)*
;
// Select Specific Clauses
subquery_factoring_clause
: WITH factoring_element (',' factoring_element)*
;
factoring_element
: query_name paren_column_list? AS '(' subquery order_by_clause? ')'
search_clause? cycle_clause?
;
search_clause
: SEARCH (DEPTH | BREADTH) FIRST BY column_name ASC? DESC? (NULLS FIRST)? (NULLS LAST)?
(',' column_name ASC? DESC? (NULLS FIRST)? (NULLS LAST)?)* SET column_name
;
cycle_clause
: CYCLE column_list SET column_name TO expression DEFAULT expression
;
subquery
: subquery_basic_elements subquery_operation_part*
;
subquery_basic_elements
: query_block
| '(' subquery ')'
;
subquery_operation_part
: (UNION ALL? | INTERSECT | MINUS) subquery_basic_elements
;
query_block
: SELECT (DISTINCT | UNIQUE | ALL)? selected_list
into_clause? from_clause? where_clause? hierarchical_query_clause? group_by_clause? model_clause? order_by_clause?
;
selected_list
: '*'
| select_list_elements (',' select_list_elements)*
;
from_clause
: FROM table_ref_list
;
select_list_elements
: tableview_name '.' ASTERISK
| expression column_alias?
;
table_ref_list
: table_ref (',' table_ref)*
;
// NOTE to PIVOT clause
// according the SQL reference this should not be possible
// according to he reality it is. Here we probably apply pivot/unpivot onto whole join clause
// eventhough it is not enclosed in parenthesis. See pivot examples 09,10,11
table_ref
: table_ref_aux join_clause* (pivot_clause | unpivot_clause)?
;
table_ref_aux
: table_ref_aux_internal flashback_query_clause* (/*{isTableAlias()}?*/ table_alias)?
;
table_ref_aux_internal
: dml_table_expression_clause (pivot_clause | unpivot_clause)? # table_ref_aux_internal_one
| '(' table_ref subquery_operation_part* ')' (pivot_clause | unpivot_clause)? # table_ref_aux_internal_two
| ONLY '(' dml_table_expression_clause ')' # table_ref_aux_internal_three
;
join_clause
: query_partition_clause? (CROSS | NATURAL)? (INNER | outer_join_type)?
JOIN table_ref_aux query_partition_clause? (join_on_part | join_using_part)*
;
join_on_part
: ON condition
;
join_using_part
: USING paren_column_list
;
outer_join_type
: (FULL | LEFT | RIGHT) OUTER?
;
query_partition_clause
: PARTITION BY (('(' (subquery | expressions)? ')') | expressions)
;
flashback_query_clause
: VERSIONS BETWEEN (SCN | TIMESTAMP) expression
| AS OF (SCN | TIMESTAMP | SNAPSHOT) expression
;
pivot_clause
: PIVOT XML? '(' pivot_element (',' pivot_element)* pivot_for_clause pivot_in_clause ')'
;
pivot_element
: aggregate_function_name '(' expression ')' column_alias?
;
pivot_for_clause
: FOR (column_name | paren_column_list)
;
pivot_in_clause
: IN '(' (subquery | ANY (',' ANY)* | pivot_in_clause_element (',' pivot_in_clause_element)*) ')'
;
pivot_in_clause_element
: pivot_in_clause_elements column_alias?
;
pivot_in_clause_elements
: expression
| '(' expressions? ')'
;
unpivot_clause
: UNPIVOT ((INCLUDE | EXCLUDE) NULLS)?
'(' (column_name | paren_column_list) pivot_for_clause unpivot_in_clause ')'
;
unpivot_in_clause
: IN '(' unpivot_in_elements (',' unpivot_in_elements)* ')'
;
unpivot_in_elements
: (column_name | paren_column_list)
(AS (constant | '(' constant (',' constant)* ')'))?
;
hierarchical_query_clause
: CONNECT BY NOCYCLE? condition start_part?
| start_part CONNECT BY NOCYCLE? condition
;
start_part
: START WITH condition
;
group_by_clause
: GROUP BY group_by_elements (',' group_by_elements)* having_clause?
| having_clause (GROUP BY group_by_elements (',' group_by_elements)*)?
;
group_by_elements
: grouping_sets_clause
| rollup_cube_clause
| expression
;
rollup_cube_clause
: (ROLLUP | CUBE) '(' grouping_sets_elements (',' grouping_sets_elements)* ')'
;
grouping_sets_clause
: GROUPING SETS '(' grouping_sets_elements (',' grouping_sets_elements)* ')'
;
grouping_sets_elements
: rollup_cube_clause
| '(' expressions? ')'
| expression
;
having_clause
: HAVING condition
;
model_clause
: MODEL cell_reference_options* return_rows_clause? reference_model* main_model
;
cell_reference_options
: (IGNORE | KEEP) NAV
| UNIQUE (DIMENSION | SINGLE REFERENCE)
;
return_rows_clause
: RETURN (UPDATED | ALL) ROWS
;
reference_model
: REFERENCE reference_model_name ON '(' subquery ')' model_column_clauses cell_reference_options*
;
main_model
: (MAIN main_model_name)? model_column_clauses cell_reference_options* model_rules_clause
;
model_column_clauses
: model_column_partition_part? DIMENSION BY model_column_list MEASURES model_column_list
;
model_column_partition_part
: PARTITION BY model_column_list
;
model_column_list
: '(' model_column (',' model_column)* ')'
;
model_column
: (expression | query_block) column_alias?
;
model_rules_clause
: model_rules_part? '(' (model_rules_element (',' model_rules_element)*)? ')'
;
model_rules_part
: RULES (UPDATE | UPSERT ALL?)? ((AUTOMATIC | SEQUENTIAL) ORDER)? model_iterate_clause?
;
model_rules_element
: (UPDATE | UPSERT ALL?)? cell_assignment order_by_clause? '=' expression
;
cell_assignment
: model_expression
;
model_iterate_clause
: ITERATE '(' expression ')' until_part?
;
until_part
: UNTIL '(' condition ')'
;
order_by_clause
: ORDER SIBLINGS? BY order_by_elements (',' order_by_elements)*
;
order_by_elements
: expression (ASC | DESC)? (NULLS (FIRST | LAST))?
;
offset_clause
: OFFSET expression (ROW | ROWS)
;
fetch_clause
: FETCH (FIRST | NEXT) (expression PERCENT_KEYWORD?)? (ROW | ROWS) (ONLY | WITH TIES)
;
for_update_clause
: FOR UPDATE for_update_of_part? for_update_options?
;
for_update_of_part
: OF column_list
;
for_update_options
: SKIP_ LOCKED
| NOWAIT
| WAIT expression
;
update_statement
: UPDATE general_table_ref update_set_clause where_clause? static_returning_clause? error_logging_clause?
;
// Update Specific Clauses
update_set_clause
: SET
(column_based_update_set_clause (',' column_based_update_set_clause)* | VALUE '(' identifier ')' '=' expression)
;
column_based_update_set_clause
: column_name '=' expression
| paren_column_list '=' subquery
;
delete_statement
: DELETE FROM? general_table_ref where_clause? static_returning_clause? error_logging_clause?
;
insert_statement
: INSERT (single_table_insert | multi_table_insert)
;
// Insert Specific Clauses
single_table_insert
: insert_into_clause (values_clause static_returning_clause? | select_statement) error_logging_clause?
;
multi_table_insert
: (ALL multi_table_element+ | conditional_insert_clause) select_statement
;
multi_table_element
: insert_into_clause values_clause? error_logging_clause?
;
conditional_insert_clause
: (ALL | FIRST)? conditional_insert_when_part+ conditional_insert_else_part?
;
conditional_insert_when_part
: WHEN condition THEN multi_table_element+
;
conditional_insert_else_part
: ELSE multi_table_element+
;
insert_into_clause
: INTO general_table_ref paren_column_list?
;
values_clause
: VALUES '(' expressions? ')'
;
merge_statement
: MERGE INTO tableview_name table_alias? USING selected_tableview ON '(' condition ')'
(merge_update_clause merge_insert_clause? | merge_insert_clause merge_update_clause?)?
error_logging_clause?
;
// Merge Specific Clauses
merge_update_clause
: WHEN MATCHED THEN UPDATE SET merge_element (',' merge_element)* where_clause? merge_update_delete_part?
;
merge_element
: column_name '=' expression
;
merge_update_delete_part
: DELETE where_clause
;
merge_insert_clause
: WHEN NOT MATCHED THEN INSERT paren_column_list?
VALUES '(' expressions? ')' where_clause?
;
selected_tableview
: (tableview_name | '(' select_statement ')') table_alias?
;
lock_table_statement
: LOCK TABLE lock_table_element (',' lock_table_element)* IN lock_mode MODE wait_nowait_part?
;
wait_nowait_part
: WAIT expression
| NOWAIT
;
// Lock Specific Clauses
lock_table_element
: tableview_name partition_extension_clause?
;
lock_mode
: ROW SHARE
| ROW EXCLUSIVE
| SHARE UPDATE?
| SHARE ROW EXCLUSIVE
| EXCLUSIVE
;
// Common DDL Clauses
general_table_ref
: (dml_table_expression_clause | ONLY '(' dml_table_expression_clause ')') table_alias?
;
static_returning_clause
: (RETURNING | RETURN) expressions into_clause
;
error_logging_clause
: LOG ERRORS error_logging_into_part? expression? error_logging_reject_part?
;
error_logging_into_part
: INTO tableview_name
;
error_logging_reject_part
: REJECT LIMIT (UNLIMITED | expression)
;
dml_table_expression_clause
: table_collection_expression
| '(' select_statement subquery_restriction_clause? ')'
| tableview_name sample_clause?
;
table_collection_expression
: (TABLE | THE) ('(' subquery ')' | '(' expression ')' outer_join_sign?)
;
subquery_restriction_clause
: WITH (READ ONLY | CHECK OPTION (CONSTRAINT constraint_name)?)
;
sample_clause
: SAMPLE BLOCK? '(' expression (',' expression)? ')' seed_part?
;
seed_part
: SEED '(' expression ')'
;
// Expression & Condition
condition
: expression
;
expressions
: expression (',' expression)*
;
expression
: cursor_expression
| logical_expression
;
cursor_expression
: CURSOR '(' subquery ')'
;
logical_expression
: unary_logical_expression
| logical_expression AND logical_expression
| logical_expression OR logical_expression
;
unary_logical_expression
: NOT? multiset_expression (IS NOT? logical_operation)*
;
logical_operation:
(NULL_
| NAN | PRESENT
| INFINITE | A_LETTER SET | EMPTY
| OF TYPE? '(' ONLY? type_spec (',' type_spec)* ')')
;
multiset_expression
: relational_expression (multiset_type=(MEMBER | SUBMULTISET) OF? concatenation)?
;
relational_expression
: relational_expression relational_operator relational_expression
| compound_expression
;
compound_expression
: concatenation
(NOT? ( IN in_elements
| BETWEEN between_elements
| like_type=(LIKE | LIKEC | LIKE2 | LIKE4) concatenation (ESCAPE concatenation)?))?
;
relational_operator
: '='
| (NOT_EQUAL_OP | '<' '>' | '!' '=' | '^' '=')
| ('<' | '>') '='?
;
in_elements
: '(' subquery ')'
| '(' concatenation (',' concatenation)* ')'
| constant
| bind_variable
| general_element
;
between_elements
: concatenation AND concatenation
;
concatenation
: model_expression
(AT (LOCAL | TIME ZONE concatenation) | interval_expression)?
| concatenation op=(ASTERISK | SOLIDUS) concatenation
| concatenation op=(PLUS_SIGN | MINUS_SIGN) concatenation
| concatenation BAR BAR concatenation
;
interval_expression
: DAY ('(' concatenation ')')? TO SECOND ('(' concatenation ')')?
| YEAR ('(' concatenation ')')? TO MONTH
;
model_expression
: unary_expression ('[' model_expression_element ']')?
;
model_expression_element
: (ANY | expression) (',' (ANY | expression))*
| single_column_for_loop (',' single_column_for_loop)*
| multi_column_for_loop
;
single_column_for_loop
: FOR column_name
( IN '(' expressions? ')'
| (LIKE expression)? FROM fromExpr=expression TO toExpr=expression
action_type=(INCREMENT | DECREMENT) action_expr=expression)
;
multi_column_for_loop
: FOR paren_column_list
IN '(' (subquery | '(' expressions? ')') ')'
;
unary_expression
: ('-' | '+') unary_expression
| PRIOR unary_expression
| CONNECT_BY_ROOT unary_expression
| /*TODO {input.LT(1).getText().equalsIgnoreCase("new") && !input.LT(2).getText().equals(".")}?*/ NEW unary_expression
| DISTINCT unary_expression
| ALL unary_expression
| /*TODO{(input.LA(1) == CASE || input.LA(2) == CASE)}?*/ case_statement/*[false]*/
| quantified_expression
| standard_function
| atom
;
case_statement /*TODO [boolean isStatementParameter]
TODO scope {
boolean isStatement;
}
@init {$case_statement::isStatement = $isStatementParameter;}*/
: searched_case_statement
| simple_case_statement
;
// CASE
simple_case_statement
: label_name? ck1=CASE expression simple_case_when_part+ case_else_part? END CASE? label_name?
;
simple_case_when_part
: WHEN expression THEN (/*TODO{$case_statement::isStatement}?*/ seq_of_statements | expression)
;
searched_case_statement
: label_name? ck1=CASE searched_case_when_part+ case_else_part? END CASE? label_name?
;
searched_case_when_part
: WHEN expression THEN (/*TODO{$case_statement::isStatement}?*/ seq_of_statements | expression)
;
case_else_part
: ELSE (/*{$case_statement::isStatement}?*/ seq_of_statements | expression)
;
atom
: table_element outer_join_sign
| bind_variable
| constant
| general_element
| '(' subquery ')' subquery_operation_part*
| '(' expressions ')'
;
quantified_expression
: (SOME | EXISTS | ALL | ANY) ('(' subquery ')' | '(' expression ')')
;
string_function
: SUBSTR '(' expression ',' expression (',' expression)? ')'
| TO_CHAR '(' (table_element | standard_function | expression)
(',' quoted_string)? (',' quoted_string)? ')'
| DECODE '(' expressions ')'
| CHR '(' concatenation USING NCHAR_CS ')'
| NVL '(' expression ',' expression ')'
| TRIM '(' ((LEADING | TRAILING | BOTH)? quoted_string? FROM)? concatenation ')'
| TO_DATE '(' expression (',' quoted_string)? ')'
;
standard_function
: string_function
| numeric_function_wrapper
| other_function
;
literal
: CHAR_STRING
| string_function
| numeric
| MAXVALUE
;
numeric_function_wrapper
: numeric_function (single_column_for_loop | multi_column_for_loop)?
;
numeric_function
: SUM '(' (DISTINCT | ALL)? expression ')'
| COUNT '(' ( ASTERISK | ((DISTINCT | UNIQUE | ALL)? concatenation)? ) ')' over_clause?
| ROUND '(' expression (',' UNSIGNED_INTEGER)? ')'
| AVG '(' (DISTINCT | ALL)? expression ')'
| MAX '(' (DISTINCT | ALL)? expression ')'
| LEAST '(' expressions ')'
| GREATEST '(' expressions ')'
;
other_function
: over_clause_keyword function_argument_analytic over_clause?
| /*TODO stantard_function_enabling_using*/ regular_id function_argument_modeling using_clause?
| COUNT '(' ( ASTERISK | (DISTINCT | UNIQUE | ALL)? concatenation) ')' over_clause?
| (CAST | XMLCAST) '(' (MULTISET '(' subquery ')' | concatenation) AS type_spec ')'
| COALESCE '(' table_element (',' (numeric | quoted_string))? ')'
| COLLECT '(' (DISTINCT | UNIQUE)? concatenation collect_order_by_part? ')'
| within_or_over_clause_keyword function_argument within_or_over_part+
| cursor_name ( PERCENT_ISOPEN | PERCENT_FOUND | PERCENT_NOTFOUND | PERCENT_ROWCOUNT )
| DECOMPOSE '(' concatenation (CANONICAL | COMPATIBILITY)? ')'
| EXTRACT '(' regular_id FROM concatenation ')'
| (FIRST_VALUE | LAST_VALUE) function_argument_analytic respect_or_ignore_nulls? over_clause
| standard_prediction_function_keyword
'(' expressions cost_matrix_clause? using_clause? ')'
| TRANSLATE '(' expression (USING (CHAR_CS | NCHAR_CS))? (',' expression)* ')'
| TREAT '(' expression AS REF? type_spec ')'
| TRIM '(' ((LEADING | TRAILING | BOTH)? quoted_string? FROM)? concatenation ')'
| XMLAGG '(' expression order_by_clause? ')' ('.' general_element_part)?
| (XMLCOLATTVAL | XMLFOREST)
'(' xml_multiuse_expression_element (',' xml_multiuse_expression_element)* ')' ('.' general_element_part)?
| XMLELEMENT
'(' (ENTITYESCAPING | NOENTITYESCAPING)? (NAME | EVALNAME)? expression
(/*TODO{input.LT(2).getText().equalsIgnoreCase("xmlattributes")}?*/ ',' xml_attributes_clause)?
(',' expression column_alias?)* ')' ('.' general_element_part)?
| XMLEXISTS '(' expression xml_passing_clause? ')'
| XMLPARSE '(' (DOCUMENT | CONTENT) concatenation WELLFORMED? ')' ('.' general_element_part)?
| XMLPI
'(' (NAME identifier | EVALNAME concatenation) (',' concatenation)? ')' ('.' general_element_part)?
| XMLQUERY
'(' concatenation xml_passing_clause? RETURNING CONTENT (NULL_ ON EMPTY)? ')' ('.' general_element_part)?
| XMLROOT
'(' concatenation (',' xmlroot_param_version_part)? (',' xmlroot_param_standalone_part)? ')' ('.' general_element_part)?
| XMLSERIALIZE
'(' (DOCUMENT | CONTENT) concatenation (AS type_spec)?
xmlserialize_param_enconding_part? xmlserialize_param_version_part? xmlserialize_param_ident_part? ((HIDE | SHOW) DEFAULTS)? ')'
('.' general_element_part)?
| xmltable
;
over_clause_keyword
: AVG
| CORR
| LAG
| LEAD
| MAX
| MEDIAN
| MIN
| NTILE
| RATIO_TO_REPORT
| ROW_NUMBER
| SUM
| VARIANCE
| REGR_
| STDDEV
| VAR_
| COVAR_
;
within_or_over_clause_keyword
: CUME_DIST
| DENSE_RANK
| LISTAGG
| PERCENT_RANK
| PERCENTILE_CONT
| PERCENTILE_DISC
| RANK
;
standard_prediction_function_keyword
: PREDICTION
| PREDICTION_BOUNDS
| PREDICTION_COST
| PREDICTION_DETAILS
| PREDICTION_PROBABILITY
| PREDICTION_SET
;
over_clause
: OVER '(' query_partition_clause? (order_by_clause windowing_clause?)? ')'
;
windowing_clause
: windowing_type
(BETWEEN windowing_elements AND windowing_elements | windowing_elements)
;
windowing_type
: ROWS
| RANGE
;
windowing_elements
: UNBOUNDED PRECEDING
| CURRENT ROW
| concatenation (PRECEDING | FOLLOWING)
;
using_clause
: USING (ASTERISK | using_element (',' using_element)*)
;
using_element
: (IN OUT? | OUT)? select_list_elements
;
collect_order_by_part
: ORDER BY concatenation
;
within_or_over_part
: WITHIN GROUP '(' order_by_clause ')'
| over_clause
;
cost_matrix_clause
: COST (MODEL AUTO? | '(' cost_class_name (',' cost_class_name)* ')' VALUES '(' expressions? ')')
;
xml_passing_clause
: PASSING (BY VALUE)? expression column_alias? (',' expression column_alias?)*
;
xml_attributes_clause
: XMLATTRIBUTES
'(' (ENTITYESCAPING | NOENTITYESCAPING)? (SCHEMACHECK | NOSCHEMACHECK)?
xml_multiuse_expression_element (',' xml_multiuse_expression_element)* ')'
;
xml_namespaces_clause
: XMLNAMESPACES
'(' (concatenation column_alias)? (',' concatenation column_alias)* xml_general_default_part? ')'
;
xml_table_column
: xml_column_name
(FOR ORDINALITY | type_spec (PATH concatenation)? xml_general_default_part?)
;
xml_general_default_part
: DEFAULT concatenation
;
xml_multiuse_expression_element
: expression (AS (id_expression | EVALNAME concatenation))?
;
xmlroot_param_version_part
: VERSION (NO VALUE | expression)
;
xmlroot_param_standalone_part
: STANDALONE (YES | NO VALUE?)
;
xmlserialize_param_enconding_part
: ENCODING concatenation
;
xmlserialize_param_version_part
: VERSION concatenation
;
xmlserialize_param_ident_part
: NO INDENT
| INDENT (SIZE '=' concatenation)?
;
// SqlPlus
sql_plus_command
: '/'
| EXIT
| PROMPT_MESSAGE
| SHOW (ERR | ERRORS)
| START_CMD
| whenever_command
| set_command
;
whenever_command
: WHENEVER (SQLERROR | OSERROR)
( EXIT (SUCCESS | FAILURE | WARNING | variable_name) (COMMIT | ROLLBACK)
| CONTINUE (COMMIT | ROLLBACK | NONE))
;
set_command
: SET regular_id (CHAR_STRING | ON | OFF | /*EXACT_NUM_LIT*/numeric | regular_id)
;
// Common
partition_extension_clause
: (SUBPARTITION | PARTITION) FOR? '(' expressions? ')'
;
column_alias
: AS? (identifier | quoted_string)
| AS
;
table_alias
: identifier
| quoted_string
;
where_clause
: WHERE (CURRENT OF cursor_name | expression)
;
into_clause
: (BULK COLLECT)? INTO variable_name (',' variable_name)*
;
// Common Named Elements
xml_column_name
: identifier
| quoted_string
;
cost_class_name
: identifier
;
attribute_name
: identifier
;
savepoint_name
: identifier
;
rollback_segment_name
: identifier
;
schema_name
: identifier
;
routine_name
: identifier ('.' id_expression)* ('@' link_name)?
;
package_name
: identifier
;
implementation_type_name
: identifier ('.' id_expression)?
;
parameter_name
: identifier
;
reference_model_name
: identifier
;
main_model_name
: identifier
;
container_tableview_name
: identifier ('.' id_expression)?
;
aggregate_function_name
: identifier ('.' id_expression)*
;
query_name
: identifier
;
grantee_name
: id_expression identified_by?
;
role_name
: id_expression
| CONNECT
;
constraint_name
: identifier ('.' id_expression)* ('@' link_name)?
;
label_name
: id_expression
;
type_name
: id_expression ('.' id_expression)*
;
sequence_name
: id_expression ('.' id_expression)*
;
exception_name
: identifier ('.' id_expression)*
;
function_name
: identifier ('.' id_expression)?
;
procedure_name
: identifier ('.' id_expression)?
;
trigger_name
: identifier ('.' id_expression)?
;
variable_name
: (INTRODUCER char_set_name)? id_expression ('.' id_expression)?
| bind_variable
;
index_name
: identifier ('.' id_expression)?
;
cursor_name
: general_element
| bind_variable
;
record_name
: identifier
| bind_variable
;
collection_name
: identifier ('.' id_expression)?
;
link_name
: identifier
;
column_name
: identifier ('.' id_expression)*
;
tableview_name
: identifier ('.' id_expression)?
(AT_SIGN link_name | /*TODO{!(input.LA(2) == BY)}?*/ partition_extension_clause)?
| xmltable outer_join_sign?
;
xmltable
: XMLTABLE '(' (xml_namespaces_clause ',')? concatenation xml_passing_clause? (COLUMNS xml_table_column (',' xml_table_column)*)? ')' ('.' general_element_part)?
;
char_set_name
: id_expression ('.' id_expression)*
;
synonym_name
: identifier
;
// Represents a valid DB object name in DDL commands which are valid for several DB (or schema) objects.
// For instance, create synonym ... for <DB object name>, or rename <old DB object name> to <new DB object name>.
// Both are valid for sequences, tables, views, etc.
schema_object_name
: id_expression
;
dir_object_name
: id_expression
;
user_object_name
: id_expression
;
grant_object_name
: tableview_name
| USER user_object_name (',' user_object_name)*
| DIRECTORY dir_object_name
| EDITION schema_object_name
| MINING MODEL schema_object_name
| JAVA (SOURCE | RESOURCE) schema_object_name
| SQL TRANSLATION PROFILE schema_object_name
;
column_list
: column_name (',' column_name)*
;
paren_column_list
: LEFT_PAREN column_list RIGHT_PAREN
;
// PL/SQL Specs
// NOTE: In reality this applies to aggregate functions only
keep_clause
: KEEP '(' DENSE_RANK (FIRST | LAST) order_by_clause ')' over_clause?
;
function_argument
: '(' (argument (',' argument)*)? ')' keep_clause?
;
function_argument_analytic
: '(' (argument respect_or_ignore_nulls? (',' argument respect_or_ignore_nulls?)*)? ')' keep_clause?
;
function_argument_modeling
: '(' column_name (',' (numeric | NULL_) (',' (numeric | NULL_))?)?
USING (tableview_name '.' ASTERISK | ASTERISK | expression column_alias? (',' expression column_alias?)*)
')' keep_clause?
;
respect_or_ignore_nulls
: (RESPECT | IGNORE) NULLS
;
argument
: (identifier '=' '>')? expression
;
type_spec
: datatype
| REF? type_name (PERCENT_ROWTYPE | PERCENT_TYPE)?
;
datatype
: native_datatype_element precision_part? (WITH LOCAL? TIME ZONE | CHARACTER SET char_set_name)?
| INTERVAL (YEAR | DAY) ('(' expression ')')? TO (MONTH | SECOND) ('(' expression ')')?
;
precision_part
: '(' (numeric | ASTERISK) (',' numeric)? (CHAR | BYTE)? ')'
;
native_datatype_element
: BINARY_INTEGER
| PLS_INTEGER
| NATURAL
| BINARY_FLOAT
| BINARY_DOUBLE
| NATURALN
| POSITIVE
| POSITIVEN
| SIGNTYPE
| SIMPLE_INTEGER
| NVARCHAR2
| DEC
| INTEGER
| INT
| NUMERIC
| SMALLINT
| NUMBER
| DECIMAL
| DOUBLE PRECISION?
| FLOAT
| REAL
| NCHAR
| LONG RAW?
| CHAR
| CHARACTER
| VARCHAR2
| VARCHAR
| STRING
| RAW
| BOOLEAN
| DATE
| ROWID
| UROWID
| YEAR
| MONTH
| DAY
| HOUR
| MINUTE
| SECOND
| TIMEZONE_HOUR
| TIMEZONE_MINUTE
| TIMEZONE_REGION
| TIMEZONE_ABBR
| TIMESTAMP
| TIMESTAMP_UNCONSTRAINED
| TIMESTAMP_TZ_UNCONSTRAINED
| TIMESTAMP_LTZ_UNCONSTRAINED
| YMINTERVAL_UNCONSTRAINED
| DSINTERVAL_UNCONSTRAINED
| BFILE
| BLOB
| CLOB
| NCLOB
| MLSLABEL
;
bind_variable
: (BINDVAR | ':' UNSIGNED_INTEGER)
// Pro*C/C++ indicator variables
(INDICATOR? (BINDVAR | ':' UNSIGNED_INTEGER))?
('.' general_element_part)*
;
general_element
: general_element_part ('.' general_element_part)*
;
general_element_part
: (INTRODUCER char_set_name)? id_expression ('.' id_expression)* ('@' link_name)? function_argument?
;
table_element
: (INTRODUCER char_set_name)? id_expression ('.' id_expression)*
;
object_privilege
: ALL PRIVILEGES?
| ALTER
| DEBUG
| DELETE
| EXECUTE
| FLASHBACK ARCHIVE
| INDEX
| INHERIT PRIVILEGES
| INSERT
| KEEP SEQUENCE
| MERGE VIEW
| ON COMMIT REFRESH
| QUERY REWRITE
| READ
| REFERENCES
| SELECT
| TRANSLATE SQL
| UNDER
| UPDATE
| USE
| WRITE
;
//Ordered by type rather than alphabetically
system_privilege
: ALL PRIVILEGES
| ADVISOR
| ADMINISTER ANY? SQL TUNING SET
| (ALTER | CREATE | DROP) ANY SQL PROFILE
| ADMINISTER SQL MANAGEMENT OBJECT
| CREATE ANY? CLUSTER
| (ALTER | DROP) ANY CLUSTER
| (CREATE | DROP) ANY CONTEXT
| EXEMPT REDACTION POLICY
| ALTER DATABASE
| (ALTER | CREATE) PUBLIC? DATABASE LINK
| DROP PUBLIC DATABASE LINK
| DEBUG CONNECT SESSION
| DEBUG ANY PROCEDURE
| ANALYZE ANY DICTIONARY
| CREATE ANY? DIMENSION
| (ALTER | DROP) ANY DIMENSION
| (CREATE | DROP) ANY DIRECTORY
| (CREATE | DROP) ANY EDITION
| FLASHBACK (ARCHIVE ADMINISTER | ANY TABLE)
| (ALTER | CREATE | DROP) ANY INDEX
| CREATE ANY? INDEXTYPE
| (ALTER | DROP | EXECUTE) ANY INDEXTYPE
| CREATE (ANY | EXTERNAL)? JOB
| EXECUTE ANY (CLASS | PROGRAM)
| MANAGE SCHEDULER
| ADMINISTER KEY MANAGEMENT
| CREATE ANY? LIBRARY
| (ALTER | DROP | EXECUTE) ANY LIBRARY
| LOGMINING
| CREATE ANY? MATERIALIZED VIEW
| (ALTER | DROP) ANY MATERIALIZED VIEW
| GLOBAL? QUERY REWRITE
| ON COMMIT REFRESH
| CREATE ANY? MINING MODEL
| (ALTER | DROP | SELECT | COMMENT) ANY MINING MODEL
| CREATE ANY? CUBE
| (ALTER | DROP | SELECT | UPDATE) ANY CUBE
| CREATE ANY? MEASURE FOLDER
| (DELETE | DROP | INSERT) ANY MEASURE FOLDER
| CREATE ANY? CUBE DIMENSION
| (ALTER | DELETE | DROP | INSERT | SELECT | UPDATE) ANY CUBE DIMENSION
| CREATE ANY? CUBE BUILD PROCESS
| (DROP | UPDATE) ANY CUBE BUILD PROCESS
| CREATE ANY? OPERATOR
| (ALTER | DROP | EXECUTE) ANY OPERATOR
| (CREATE | ALTER | DROP) ANY OUTLINE
| CREATE PLUGGABLE DATABASE
| SET CONTAINER
| CREATE ANY? PROCEDURE
| (ALTER | DROP | EXECUTE) ANY PROCEDURE
| (CREATE | ALTER | DROP ) PROFILE
| CREATE ROLE
| (ALTER | DROP | GRANT) ANY ROLE
| (CREATE | ALTER | DROP) ROLLBACK SEGMENT
| CREATE ANY? SEQUENCE
| (ALTER | DROP | SELECT) ANY SEQUENCE
| (ALTER | CREATE | RESTRICTED) SESSION
| ALTER RESOURCE COST
| CREATE ANY? SQL TRANSLATION PROFILE
| (ALTER | DROP | USE) ANY SQL TRANSLATION PROFILE
| TRANSLATE ANY SQL
| CREATE ANY? SYNONYM
| DROP ANY SYNONYM
| (CREATE | DROP) PUBLIC SYNONYM
| CREATE ANY? TABLE
| (ALTER | BACKUP | COMMENT | DELETE | DROP | INSERT | LOCK | READ | SELECT | UPDATE) ANY TABLE
| (CREATE | ALTER | DROP | MANAGE | UNLIMITED) TABLESPACE
| CREATE ANY? TRIGGER
| (ALTER | DROP) ANY TRIGGER
| ADMINISTER DATABASE TRIGGER
| CREATE ANY? TYPE
| (ALTER | DROP | EXECUTE | UNDER) ANY TYPE
| (CREATE | ALTER | DROP) USER
| CREATE ANY? VIEW
| (DROP | UNDER | MERGE) ANY VIEW
| (ANALYZE | AUDIT) ANY
| BECOME USER
| CHANGE NOTIFICATION
| EXEMPT ACCESS POLICY
| FORCE ANY? TRANSACTION
| GRANT ANY OBJECT? PRIVILEGE
| INHERIT ANY PRIVILEGES
| KEEP DATE TIME
| KEEP SYSGUID
| PURGE DBA_RECYCLEBIN
| RESUMABLE
| SELECT ANY (DICTIONARY | TRANSACTION)
| SYSBACKUP
| SYSDBA
| SYSDG
| SYSKM
| SYSOPER
;
// $>
// $<Lexer Mappings
constant
: TIMESTAMP (quoted_string | bind_variable) (AT TIME ZONE quoted_string)?
| INTERVAL (quoted_string | bind_variable | general_element_part)
(YEAR | MONTH | DAY | HOUR | MINUTE | SECOND)
('(' (UNSIGNED_INTEGER | bind_variable) (',' (UNSIGNED_INTEGER | bind_variable) )? ')')?
(TO ( DAY | HOUR | MINUTE | SECOND ('(' (UNSIGNED_INTEGER | bind_variable) ')')?))?
| numeric
| DATE quoted_string
| quoted_string
| NULL_
| TRUE
| FALSE
| DBTIMEZONE
| SESSIONTIMEZONE
| MINVALUE
| MAXVALUE
| DEFAULT
;
numeric
: UNSIGNED_INTEGER
| APPROXIMATE_NUM_LIT
;
numeric_negative
: MINUS_SIGN numeric
;
quoted_string
: CHAR_STRING
//| CHAR_STRING_PERL
| NATIONAL_CHAR_STRING_LIT
;
identifier
: (INTRODUCER char_set_name)? id_expression
;
id_expression
: regular_id
| DELIMITED_ID
;
outer_join_sign
: '(' '+' ')'
;
regular_id
: non_reserved_keywords_pre12c
| non_reserved_keywords_in_12c
| REGULAR_ID
| A_LETTER
| AGENT
| AGGREGATE
| ANALYZE
| AUTONOMOUS_TRANSACTION
| BATCH
| BINARY_INTEGER
| BOOLEAN
| C_LETTER
| CHAR
| CLUSTER
| CONSTRUCTOR
| CUSTOMDATUM
| DECIMAL
| DELETE
| DETERMINISTIC
| DSINTERVAL_UNCONSTRAINED
| ERR
| EXCEPTION
| EXCEPTION_INIT
| EXCEPTIONS
| EXISTS
| EXIT
| FLOAT
| FORALL
| INDICES
| INOUT
| INTEGER
| LANGUAGE
| LONG
| LOOP
| NUMBER
| ORADATA
| OSERROR
| OUT
| OVERRIDING
| PARALLEL_ENABLE
| PIPELINED
| PLS_INTEGER
| POSITIVE
| POSITIVEN
| PRAGMA
| RAISE
| RAW
| RECORD
| REF
| RENAME
| RESTRICT_REFERENCES
| RESULT
| SELF
| SERIALLY_REUSABLE
| SET
| SIGNTYPE
| SIMPLE_INTEGER
| SMALLINT
| SQLDATA
| SQLERROR
| SUBTYPE
| TIMESTAMP_LTZ_UNCONSTRAINED
| TIMESTAMP_TZ_UNCONSTRAINED
| TIMESTAMP_UNCONSTRAINED
| TRIGGER
| VARCHAR
| VARCHAR2
| VARIABLE
| WARNING
| WHILE
| XMLAGG
| YMINTERVAL_UNCONSTRAINED
| REGR_
| VAR_
| COVAR_
;
non_reserved_keywords_in_12c
: ACL
| ACTION
| ACTIONS
| ACTIVE
| ACTIVE_DATA
| ACTIVITY
| ADAPTIVE_PLAN
| ADVANCED
| AFD_DISKSTRING
| ANOMALY
| ANSI_REARCH
| APPLICATION
| APPROX_COUNT_DISTINCT
| ARCHIVAL
| ARCHIVED
| ASIS
| ASSIGN
| AUTO_LOGIN
| AUTO_REOPTIMIZE
| AVRO
| BACKGROUND
| BATCHSIZE
| BATCH_TABLE_ACCESS_BY_ROWID
| BEGINNING
| BEQUEATH
| BITMAP_AND
| BSON
| CACHING
| CALCULATED
| CALLBACK
| CAPACITY
| CDBDEFAULT
| CLASSIFIER
| CLEANUP
| CLIENT
| CLUSTER_DETAILS
| CLUSTER_DISTANCE
| CLUSTERING
| COMMON_DATA
| COMPONENT
| COMPONENTS
| CON_DBID_TO_ID
| CONDITION
| CONDITIONAL
| CON_GUID_TO_ID
| CON_ID
| CON_NAME_TO_ID
| CONTAINER_DATA
| CONTAINERS
| CON_UID_TO_ID
| COOKIE
| COPY
| CREATE_FILE_DEST
| CREDENTIAL
| CRITICAL
| CUBE_AJ
| CUBE_SJ
| DATAMOVEMENT
| DATAOBJ_TO_MAT_PARTITION
| DATAPUMP
| DATA_SECURITY_REWRITE_LIMIT
| DAYS
| DB_UNIQUE_NAME
| DECORRELATE
| DEFINE
| DELEGATE
| DELETE_ALL
| DESTROY
| DIMENSIONS
| DISABLE_ALL
| DISABLE_PARALLEL_DML
| DISCARD
| DISTRIBUTE
| DUPLICATE
| DV
| EDITIONABLE
| ELIM_GROUPBY
| EM
| ENABLE_ALL
| ENABLE_PARALLEL_DML
| EQUIPART
| EVAL
| EVALUATE
| EXISTING
| EXPRESS
| EXTRACTCLOBXML
| FACTOR
| FAILOVER
| FAILURE
| FAMILY
| FAR
| FASTSTART
| FEATURE_DETAILS
| FETCH
| FILE_NAME_CONVERT
| FIXED_VIEW_DATA
| FORMAT
| GATHER_OPTIMIZER_STATISTICS
| GET
| ILM
| INACTIVE
| INDEXING
| INHERIT
| INMEMORY
| INMEMORY_PRUNING
| INPLACE
| INTERLEAVED
| JSON
| JSON_ARRAY
| JSON_ARRAYAGG
| JSON_EQUAL
| JSON_EXISTS
| JSON_EXISTS2
| JSONGET
| JSON_OBJECT
| JSON_OBJECTAGG
| JSONPARSE
| JSON_QUERY
| JSON_SERIALIZE
| JSON_TABLE
| JSON_TEXTCONTAINS
| JSON_TEXTCONTAINS2
| JSON_VALUE
| KEYSTORE
| LABEL
| LAX
| LIFECYCLE
| LINEAR
| LOCKING
| LOGMINING
| MAP
| MATCH
| MATCHES
| MATCH_NUMBER
| MATCH_RECOGNIZE
| MAX_SHARED_TEMP_SIZE
| MEMCOMPRESS
| METADATA
| MODEL_NB
| MODEL_SV
| MODIFICATION
| MODULE
| MONTHS
| MULTIDIMENSIONAL
| NEG
| NO_ADAPTIVE_PLAN
| NO_ANSI_REARCH
| NO_AUTO_REOPTIMIZE
| NO_BATCH_TABLE_ACCESS_BY_ROWID
| NO_CLUSTERING
| NO_COMMON_DATA
| NOCOPY
| NO_DATA_SECURITY_REWRITE
| NO_DECORRELATE
| NO_ELIM_GROUPBY
| NO_GATHER_OPTIMIZER_STATISTICS
| NO_INMEMORY
| NO_INMEMORY_PRUNING
| NOKEEP
| NONEDITIONABLE
| NO_OBJECT_LINK
| NO_PARTIAL_JOIN
| NO_PARTIAL_ROLLUP_PUSHDOWN
| NOPARTITION
| NO_PQ_CONCURRENT_UNION
| NO_PQ_REPLICATE
| NO_PQ_SKEW
| NO_PX_FAULT_TOLERANCE
| NORELOCATE
| NOREPLAY
| NO_ROOT_SW_FOR_LOCAL
| NO_SQL_TRANSLATION
| NO_USE_CUBE
| NO_USE_VECTOR_AGGREGATION
| NO_VECTOR_TRANSFORM
| NO_VECTOR_TRANSFORM_DIMS
| NO_VECTOR_TRANSFORM_FACT
| NO_ZONEMAP
| OBJ_ID
| OFFSET
| OLS
| OMIT
| ONE
| ORA_CHECK_ACL
| ORA_CHECK_PRIVILEGE
| ORA_CLUSTERING
| ORA_INVOKING_USER
| ORA_INVOKING_USERID
| ORA_INVOKING_XS_USER
| ORA_INVOKING_XS_USER_GUID
| ORA_RAWCOMPARE
| ORA_RAWCONCAT
| ORA_WRITE_TIME
| PARTIAL
| PARTIAL_JOIN
| PARTIAL_ROLLUP_PUSHDOWN
| PAST
| PATCH
| PATH_PREFIX
| PATTERN
| PER
| PERIOD
| PERIOD_KEYWORD
| PERMUTE
| PLUGGABLE
| POOL_16K
| POOL_2K
| POOL_32K
| POOL_4K
| POOL_8K
| PQ_CONCURRENT_UNION
| PQ_DISTRIBUTE_WINDOW
| PQ_FILTER
| PQ_REPLICATE
| PQ_SKEW
| PRELOAD
| PRETTY
| PREV
| PRINTBLOBTOCLOB
| PRIORITY
| PRIVILEGED
| PROXY
| PRUNING
| PX_FAULT_TOLERANCE
| REALM
| REDEFINE
| RELOCATE
| RESTART
| ROLESET
| ROWID_MAPPING_TABLE
| RUNNING
| SAVE
| SCRUB
| SDO_GEOM_MBR
| SECRET
| SERIAL
| SERVICE_NAME_CONVERT
| SERVICES
| SHARING
| SHELFLIFE
| SOURCE_FILE_DIRECTORY
| SOURCE_FILE_NAME_CONVERT
| SQL_TRANSLATION_PROFILE
| STANDARD_HASH
| STANDBYS
| STATE
| STATEMENT
| STREAM
| SUBSCRIBE
| SUBSET
| SUCCESS
| SYSBACKUP
| SYS_CHECK_PRIVILEGE
| SYSDG
| SYS_GET_COL_ACLIDS
| SYSGUID
| SYSKM
| SYS_MKXTI
| SYSOBJ
| SYS_OP_CYCLED_SEQ
| SYS_OP_HASH
| SYS_OP_KEY_VECTOR_CREATE
| SYS_OP_KEY_VECTOR_FILTER
| SYS_OP_KEY_VECTOR_FILTER_LIST
| SYS_OP_KEY_VECTOR_SUCCEEDED
| SYS_OP_KEY_VECTOR_USE
| SYS_OP_PART_ID
| SYS_OP_ZONE_ID
| SYS_RAW_TO_XSID
| SYS_XSID_TO_RAW
| SYS_ZMAP_FILTER
| SYS_ZMAP_REFRESH
| TAG
| TEXT
| TIER
| TIES
| TO_ACLID
| TRANSLATION
| TRUST
| UCS2
| UNCONDITIONAL
| UNMATCHED
| UNPLUG
| UNSUBSCRIBE
| USABLE
| USE_CUBE
| USE_HIDDEN_PARTITIONS
| USER_DATA
| USER_TABLESPACES
| USE_VECTOR_AGGREGATION
| USING_NO_EXPAND
| UTF16BE
| UTF16LE
| UTF32
| UTF8
| V1
| V2
| VALID_TIME_END
| VECTOR_TRANSFORM
| VECTOR_TRANSFORM_DIMS
| VECTOR_TRANSFORM_FACT
| VERIFIER
| VIOLATION
| VISIBILITY
| WEEK
| WEEKS
| WITH_PLSQL
| WRAPPER
| XS
| YEARS
| ZONEMAP
;
non_reserved_keywords_pre12c
: ABORT
| ABS
| ACCESSED
| ACCESS
| ACCOUNT
| ACOS
| ACTIVATE
| ACTIVE_COMPONENT
| ACTIVE_FUNCTION
| ACTIVE_TAG
| ADD_COLUMN
| ADD_GROUP
| ADD_MONTHS
| ADD
| ADJ_DATE
| ADMINISTER
| ADMINISTRATOR
| ADMIN
| ADVISE
| ADVISOR
| AFTER
| ALIAS
| ALLOCATE
| ALLOW
| ALL_ROWS
| ALWAYS
| ANALYZE
| ANCILLARY
| AND_EQUAL
| ANTIJOIN
| ANYSCHEMA
| APPENDCHILDXML
| APPEND
| APPEND_VALUES
| APPLY
| ARCHIVELOG
| ARCHIVE
| ARRAY
| ASCII
| ASCIISTR
| ASIN
| ASSEMBLY
| ASSOCIATE
| ASYNCHRONOUS
| ASYNC
| ATAN2
| ATAN
| AT
| ATTRIBUTE
| ATTRIBUTES
| AUTHENTICATED
| AUTHENTICATION
| AUTHID
| AUTHORIZATION
| AUTOALLOCATE
| AUTOEXTEND
| AUTOMATIC
| AUTO
| AVAILABILITY
| AVG
| BACKUP
| BASICFILE
| BASIC
| BATCH
| BECOME
| BEFORE
| BEGIN
| BEGIN_OUTLINE_DATA
| BEHALF
| BFILE
| BFILENAME
| BIGFILE
| BINARY_DOUBLE_INFINITY
| BINARY_DOUBLE
| BINARY_DOUBLE_NAN
| BINARY_FLOAT_INFINITY
| BINARY_FLOAT
| BINARY_FLOAT_NAN
| BINARY
| BIND_AWARE
| BINDING
| BIN_TO_NUM
| BITAND
| BITMAP
| BITMAPS
| BITMAP_TREE
| BITS
| BLOB
| BLOCK
| BLOCK_RANGE
| BLOCKSIZE
| BLOCKS
| BODY
| BOTH
| BOUND
| BRANCH
| BREADTH
| BROADCAST
| BUFFER_CACHE
| BUFFER
| BUFFER_POOL
| BUILD
| BULK
| BYPASS_RECURSIVE_CHECK
| BYPASS_UJVC
| BYTE
| CACHE_CB
| CACHE_INSTANCES
| CACHE
| CACHE_TEMP_TABLE
| CALL
| CANCEL
| CARDINALITY
| CASCADE
| CASE
| CAST
| CATEGORY
| CEIL
| CELL_FLASH_CACHE
| CERTIFICATE
| CFILE
| CHAINED
| CHANGE_DUPKEY_ERROR_INDEX
| CHANGE
| CHARACTER
| CHAR_CS
| CHARTOROWID
| CHECK_ACL_REWRITE
| CHECKPOINT
| CHILD
| CHOOSE
| CHR
| CHUNK
| CLASS
| CLEAR
| CLOB
| CLONE
| CLOSE_CACHED_OPEN_CURSORS
| CLOSE
| CLUSTER_BY_ROWID
| CLUSTER_ID
| CLUSTERING_FACTOR
| CLUSTER_PROBABILITY
| CLUSTER_SET
| COALESCE
| COALESCE_SQ
| COARSE
| CO_AUTH_IND
| COLD
| COLLECT
| COLUMNAR
| COLUMN_AUTH_INDICATOR
| COLUMN
| COLUMNS
| COLUMN_STATS
| COLUMN_VALUE
| COMMENT
| COMMIT
| COMMITTED
| COMPACT
| COMPATIBILITY
| COMPILE
| COMPLETE
| COMPLIANCE
| COMPOSE
| COMPOSITE_LIMIT
| COMPOSITE
| COMPOUND
| COMPUTE
| CONCAT
| CONFIRM
| CONFORMING
| CONNECT_BY_CB_WHR_ONLY
| CONNECT_BY_COMBINE_SW
| CONNECT_BY_COST_BASED
| CONNECT_BY_ELIM_DUPS
| CONNECT_BY_FILTERING
| CONNECT_BY_ISCYCLE
| CONNECT_BY_ISLEAF
| CONNECT_BY_ROOT
| CONNECT_TIME
| CONSIDER
| CONSISTENT
| CONSTANT
| CONST
| CONSTRAINT
| CONSTRAINTS
| CONTAINER
| CONTENT
| CONTENTS
| CONTEXT
| CONTINUE
| CONTROLFILE
| CONVERT
| CORR_K
| CORR
| CORR_S
| CORRUPTION
| CORRUPT_XID_ALL
| CORRUPT_XID
| COSH
| COS
| COST
| COST_XML_QUERY_REWRITE
| COUNT
| COVAR_POP
| COVAR_SAMP
| CPU_COSTING
| CPU_PER_CALL
| CPU_PER_SESSION
| CRASH
| CREATE_STORED_OUTLINES
| CREATION
| CROSSEDITION
| CROSS
| CSCONVERT
| CUBE_GB
| CUBE
| CUME_DISTM
| CUME_DIST
| CURRENT_DATE
| CURRENT
| CURRENT_SCHEMA
| CURRENT_TIME
| CURRENT_TIMESTAMP
| CURRENT_USER
| CURRENTV
| CURSOR
| CURSOR_SHARING_EXACT
| CURSOR_SPECIFIC_SEGMENT
| CV
| CYCLE
| DANGLING
| DATABASE
| DATAFILE
| DATAFILES
| DATA
| DATAOBJNO
| DATAOBJ_TO_PARTITION
| DATE_MODE
| DAY
| DBA
| DBA_RECYCLEBIN
| DBMS_STATS
| DB_ROLE_CHANGE
| DBTIMEZONE
| DB_VERSION
| DDL
| DEALLOCATE
| DEBUGGER
| DEBUG
| DECLARE
| DEC
| DECOMPOSE
| DECREMENT
| DECR
| DECRYPT
| DEDUPLICATE
| DEFAULTS
| DEFERRABLE
| DEFERRED
| DEFINED
| DEFINER
| DEGREE
| DELAY
| DELETEXML
| DEMAND
| DENSE_RANKM
| DENSE_RANK
| DEPENDENT
| DEPTH
| DEQUEUE
| DEREF
| DEREF_NO_REWRITE
| DETACHED
| DETERMINES
| DICTIONARY
| DIMENSION
| DIRECT_LOAD
| DIRECTORY
| DIRECT_PATH
| DISABLE
| DISABLE_PRESET
| DISABLE_RPKE
| DISALLOW
| DISASSOCIATE
| DISCONNECT
| DISKGROUP
| DISK
| DISKS
| DISMOUNT
| DISTINGUISHED
| DISTRIBUTED
| DML
| DML_UPDATE
| DOCFIDELITY
| DOCUMENT
| DOMAIN_INDEX_FILTER
| DOMAIN_INDEX_NO_SORT
| DOMAIN_INDEX_SORT
| DOUBLE
| DOWNGRADE
| DRIVING_SITE
| DROP_COLUMN
| DROP_GROUP
| DST_UPGRADE_INSERT_CONV
| DUMP
| DYNAMIC
| DYNAMIC_SAMPLING_EST_CDN
| DYNAMIC_SAMPLING
| EACH
| EDITIONING
| EDITION
| EDITIONS
| ELEMENT
| ELIMINATE_JOIN
| ELIMINATE_OBY
| ELIMINATE_OUTER_JOIN
| EMPTY_BLOB
| EMPTY_CLOB
| EMPTY
| ENABLE
| ENABLE_PRESET
| ENCODING
| ENCRYPTION
| ENCRYPT
| END_OUTLINE_DATA
| ENFORCED
| ENFORCE
| ENQUEUE
| ENTERPRISE
| ENTITYESCAPING
| ENTRY
| ERROR_ARGUMENT
| ERROR
| ERROR_ON_OVERLAP_TIME
| ERRORS
| ESCAPE
| ESTIMATE
| EVALNAME
| EVALUATION
| EVENTS
| EVERY
| EXCEPTIONS
| EXCEPT
| EXCHANGE
| EXCLUDE
| EXCLUDING
| EXECUTE
| EXEMPT
| EXISTSNODE
| EXPAND_GSET_TO_UNION
| EXPAND_TABLE
| EXPIRE
| EXPLAIN
| EXPLOSION
| EXP
| EXPORT
| EXPR_CORR_CHECK
| EXTENDS
| EXTENT
| EXTENTS
| EXTERNALLY
| EXTERNAL
| EXTRACT
| EXTRACTVALUE
| EXTRA
| FACILITY
| FACT
| FACTORIZE_JOIN
| FAILED_LOGIN_ATTEMPTS
| FAILED
| FAILGROUP
| FALSE
| FAST
| FBTSCAN
| FEATURE_ID
| FEATURE_SET
| FEATURE_VALUE
| FILE
| FILESYSTEM_LIKE_LOGGING
| FILTER
| FINAL
| FINE
| FINISH
| FIRSTM
| FIRST
| FIRST_ROWS
| FIRST_VALUE
| FLAGGER
| FLASHBACK
| FLASH_CACHE
| FLOB
| FLOOR
| FLUSH
| FOLDER
| FOLLOWING
| FOLLOWS
| FORCE
| FORCE_XML_QUERY_REWRITE
| FOREIGN
| FOREVER
| FORWARD
| FRAGMENT_NUMBER
| FREELIST
| FREELISTS
| FREEPOOLS
| FRESH
| FROM_TZ
| FULL
| FULL_OUTER_JOIN_TO_OUTER
| FUNCTION
| FUNCTIONS
| GATHER_PLAN_STATISTICS
| GBY_CONC_ROLLUP
| GBY_PUSHDOWN
| GENERATED
| GLOBALLY
| GLOBAL
| GLOBAL_NAME
| GLOBAL_TOPIC_ENABLED
| GREATEST
| GROUP_BY
| GROUP_ID
| GROUPING_ID
| GROUPING
| GROUPS
| GUARANTEED
| GUARANTEE
| GUARD
| HASH_AJ
| HASHKEYS
| HASH
| HASH_SJ
| HEADER
| HEAP
| HELP
| HEXTORAW
| HEXTOREF
| HIDDEN_KEYWORD
| HIDE
| HIERARCHY
| HIGH
| HINTSET_BEGIN
| HINTSET_END
| HOT
| HOUR
| HWM_BROKERED
| HYBRID
| IDENTIFIER
| IDENTITY
| IDGENERATORS
| IDLE_TIME
| ID
| IF
| IGNORE
| IGNORE_OPTIM_EMBEDDED_HINTS
| IGNORE_ROW_ON_DUPKEY_INDEX
| IGNORE_WHERE_CLAUSE
| IMMEDIATE
| IMPACT
| IMPORT
| INCLUDE
| INCLUDE_VERSION
| INCLUDING
| INCREMENTAL
| INCREMENT
| INCR
| INDENT
| INDEX_ASC
| INDEX_COMBINE
| INDEX_DESC
| INDEXED
| INDEXES
| INDEX_FFS
| INDEX_FILTER
| INDEX_JOIN
| INDEX_ROWS
| INDEX_RRS
| INDEX_RS_ASC
| INDEX_RS_DESC
| INDEX_RS
| INDEX_SCAN
| INDEX_SKIP_SCAN
| INDEX_SS_ASC
| INDEX_SS_DESC
| INDEX_SS
| INDEX_STATS
| INDEXTYPE
| INDEXTYPES
| INDICATOR
| INFINITE
| INFORMATIONAL
| INITCAP
| INITIALIZED
| INITIALLY
| INITIAL
| INITRANS
| INLINE
| INLINE_XMLTYPE_NT
| IN_MEMORY_METADATA
| INNER
| INSERTCHILDXMLAFTER
| INSERTCHILDXMLBEFORE
| INSERTCHILDXML
| INSERTXMLAFTER
| INSERTXMLBEFORE
| INSTANCE
| INSTANCES
| INSTANTIABLE
| INSTANTLY
| INSTEAD
| INSTR2
| INSTR4
| INSTRB
| INSTRC
| INSTR
| INTERMEDIATE
| INTERNAL_CONVERT
| INTERNAL_USE
| INTERPRETED
| INTERVAL
| INT
| INVALIDATE
| INVISIBLE
| IN_XQUERY
| ISOLATION_LEVEL
| ISOLATION
| ITERATE
| ITERATION_NUMBER
| JAVA
| JOB
| JOIN
| KEEP_DUPLICATES
| KEEP
| KERBEROS
| KEY_LENGTH
| KEY
| KEYSIZE
| KEYS
| KILL
| LAG
| LAST_DAY
| LAST
| LAST_VALUE
| LATERAL
| LAYER
| LDAP_REGISTRATION_ENABLED
| LDAP_REGISTRATION
| LDAP_REG_SYNC_INTERVAL
| LEADING
| LEAD
| LEAST
| LEFT
| LENGTH2
| LENGTH4
| LENGTHB
| LENGTHC
| LENGTH
| LESS
| LEVEL
| LEVELS
| LIBRARY
| LIFE
| LIFETIME
| LIKE2
| LIKE4
| LIKEC
| LIKE_EXPAND
| LIMIT
| LINK
| LISTAGG
| LIST
| LN
| LNNVL
| LOAD
| LOB
| LOBNVL
| LOBS
| LOCAL_INDEXES
| LOCAL
| LOCALTIME
| LOCALTIMESTAMP
| LOCATION
| LOCATOR
| LOCKED
| LOGFILE
| LOGFILES
| LOGGING
| LOGICAL
| LOGICAL_READS_PER_CALL
| LOGICAL_READS_PER_SESSION
| LOG
| LOGOFF
| LOGON
| LOG_READ_ONLY_VIOLATIONS
| LOWER
| LOW
| LPAD
| LTRIM
| MAIN
| MAKE_REF
| MANAGED
| MANAGEMENT
| MANAGE
| MANAGER
| MANUAL
| MAPPING
| MASTER
| MATCHED
| MATERIALIZED
| MATERIALIZE
| MAXARCHLOGS
| MAXDATAFILES
| MAXEXTENTS
| MAXIMIZE
| MAXINSTANCES
| MAXLOGFILES
| MAXLOGHISTORY
| MAXLOGMEMBERS
| MAX
| MAXSIZE
| MAXTRANS
| MAXVALUE
| MEASURE
| MEASURES
| MEDIAN
| MEDIUM
| MEMBER
| MEMORY
| MERGEACTIONS
| MERGE_AJ
| MERGE_CONST_ON
| MERGE
| MERGE_SJ
| METHOD
| MIGRATE
| MIGRATION
| MINEXTENTS
| MINIMIZE
| MINIMUM
| MINING
| MIN
| MINUS_NULL
| MINUTE
| MINVALUE
| MIRRORCOLD
| MIRRORHOT
| MIRROR
| MLSLABEL
| MODEL_COMPILE_SUBQUERY
| MODEL_DONTVERIFY_UNIQUENESS
| MODEL_DYNAMIC_SUBQUERY
| MODEL_MIN_ANALYSIS
| MODEL
| MODEL_NO_ANALYSIS
| MODEL_PBY
| MODEL_PUSH_REF
| MODIFY_COLUMN_TYPE
| MODIFY
| MOD
| MONITORING
| MONITOR
| MONTH
| MONTHS_BETWEEN
| MOUNT
| MOUNTPATH
| MOVEMENT
| MOVE
| MULTISET
| MV_MERGE
| NAMED
| NAME
| NAMESPACE
| NAN
| NANVL
| NATIONAL
| NATIVE_FULL_OUTER_JOIN
| NATIVE
| NATURAL
| NAV
| NCHAR_CS
| NCHAR
| NCHR
| NCLOB
| NEEDED
| NESTED
| NESTED_TABLE_FAST_INSERT
| NESTED_TABLE_GET_REFS
| NESTED_TABLE_ID
| NESTED_TABLE_SET_REFS
| NESTED_TABLE_SET_SETID
| NETWORK
| NEVER
| NEW
| NEW_TIME
| NEXT_DAY
| NEXT
| NL_AJ
| NLJ_BATCHING
| NLJ_INDEX_FILTER
| NLJ_INDEX_SCAN
| NLJ_PREFETCH
| NLS_CALENDAR
| NLS_CHARACTERSET
| NLS_CHARSET_DECL_LEN
| NLS_CHARSET_ID
| NLS_CHARSET_NAME
| NLS_COMP
| NLS_CURRENCY
| NLS_DATE_FORMAT
| NLS_DATE_LANGUAGE
| NLS_INITCAP
| NLS_ISO_CURRENCY
| NL_SJ
| NLS_LANG
| NLS_LANGUAGE
| NLS_LENGTH_SEMANTICS
| NLS_LOWER
| NLS_NCHAR_CONV_EXCP
| NLS_NUMERIC_CHARACTERS
| NLS_SORT
| NLSSORT
| NLS_SPECIAL_CHARS
| NLS_TERRITORY
| NLS_UPPER
| NO_ACCESS
| NOAPPEND
| NOARCHIVELOG
| NOAUDIT
| NO_BASETABLE_MULTIMV_REWRITE
| NO_BIND_AWARE
| NO_BUFFER
| NOCACHE
| NO_CARTESIAN
| NO_CHECK_ACL_REWRITE
| NO_CLUSTER_BY_ROWID
| NO_COALESCE_SQ
| NO_CONNECT_BY_CB_WHR_ONLY
| NO_CONNECT_BY_COMBINE_SW
| NO_CONNECT_BY_COST_BASED
| NO_CONNECT_BY_ELIM_DUPS
| NO_CONNECT_BY_FILTERING
| NO_COST_XML_QUERY_REWRITE
| NO_CPU_COSTING
| NOCPU_COSTING
| NOCYCLE
| NODELAY
| NO_DOMAIN_INDEX_FILTER
| NO_DST_UPGRADE_INSERT_CONV
| NO_ELIMINATE_JOIN
| NO_ELIMINATE_OBY
| NO_ELIMINATE_OUTER_JOIN
| NOENTITYESCAPING
| NO_EXPAND_GSET_TO_UNION
| NO_EXPAND
| NO_EXPAND_TABLE
| NO_FACT
| NO_FACTORIZE_JOIN
| NO_FILTERING
| NOFORCE
| NO_FULL_OUTER_JOIN_TO_OUTER
| NO_GBY_PUSHDOWN
| NOGUARANTEE
| NO_INDEX_FFS
| NO_INDEX
| NO_INDEX_SS
| NO_LOAD
| NOLOCAL
| NOLOGGING
| NOMAPPING
| NOMAXVALUE
| NO_MERGE
| NOMINIMIZE
| NOMINVALUE
| NO_MODEL_PUSH_REF
| NO_MONITORING
| NOMONITORING
| NO_MONITOR
| NO_MULTIMV_REWRITE
| NO
| NO_NATIVE_FULL_OUTER_JOIN
| NONBLOCKING
| NONE
| NO_NLJ_BATCHING
| NO_NLJ_PREFETCH
| NONSCHEMA
| NOORDER
| NO_ORDER_ROLLUPS
| NO_OUTER_JOIN_TO_ANTI
| NO_OUTER_JOIN_TO_INNER
| NOOVERRIDE
| NO_PARALLEL_INDEX
| NOPARALLEL_INDEX
| NO_PARALLEL
| NOPARALLEL
| NO_PARTIAL_COMMIT
| NO_PLACE_DISTINCT
| NO_PLACE_GROUP_BY
| NO_PQ_MAP
| NO_PRUNE_GSETS
| NO_PULL_PRED
| NO_PUSH_PRED
| NO_PUSH_SUBQ
| NO_PX_JOIN_FILTER
| NO_QKN_BUFF
| NO_QUERY_TRANSFORMATION
| NO_REF_CASCADE
| NORELY
| NOREPAIR
| NORESETLOGS
| NO_RESULT_CACHE
| NOREVERSE
| NO_REWRITE
| NOREWRITE
| NORMAL
| NOROWDEPENDENCIES
| NOSCHEMACHECK
| NOSEGMENT
| NO_SEMIJOIN
| NO_SEMI_TO_INNER
| NO_SET_TO_JOIN
| NOSORT
| NO_SQL_TUNE
| NO_STAR_TRANSFORMATION
| NO_STATEMENT_QUEUING
| NO_STATS_GSETS
| NOSTRICT
| NO_SUBQUERY_PRUNING
| NO_SUBSTRB_PAD
| NO_SWAP_JOIN_INPUTS
| NOSWITCH
| NO_TABLE_LOOKUP_BY_NL
| NO_TEMP_TABLE
| NOTHING
| NOTIFICATION
| NO_TRANSFORM_DISTINCT_AGG
| NO_UNNEST
| NO_USE_HASH_AGGREGATION
| NO_USE_HASH_GBY_FOR_PUSHDOWN
| NO_USE_HASH
| NO_USE_INVISIBLE_INDEXES
| NO_USE_MERGE
| NO_USE_NL
| NOVALIDATE
| NO_XDB_FASTPATH_INSERT
| NO_XML_DML_REWRITE
| NO_XMLINDEX_REWRITE_IN_SELECT
| NO_XMLINDEX_REWRITE
| NO_XML_QUERY_REWRITE
| NTH_VALUE
| NTILE
| NULLIF
| NULLS
| NUMERIC
| NUM_INDEX_KEYS
| NUMTODSINTERVAL
| NUMTOYMINTERVAL
| NVARCHAR2
| NVL2
| NVL
| OBJECT2XML
| OBJECT
| OBJNO
| OBJNO_REUSE
| OCCURENCES
| OFFLINE
| OFF
| OIDINDEX
| OID
| OLAP
| OLD
| OLD_PUSH_PRED
| OLTP
| ONLINE
| ONLY
| OPAQUE
| OPAQUE_TRANSFORM
| OPAQUE_XCANONICAL
| OPCODE
| OPEN
| OPERATIONS
| OPERATOR
| OPT_ESTIMATE
| OPTIMAL
| OPTIMIZE
| OPTIMIZER_FEATURES_ENABLE
| OPTIMIZER_GOAL
| OPT_PARAM
| ORA_BRANCH
| ORADEBUG
| ORA_DST_AFFECTED
| ORA_DST_CONVERT
| ORA_DST_ERROR
| ORA_GET_ACLIDS
| ORA_GET_PRIVILEGES
| ORA_HASH
| ORA_ROWSCN
| ORA_ROWSCN_RAW
| ORA_ROWVERSION
| ORA_TABVERSION
| ORDERED
| ORDERED_PREDICATES
| ORDINALITY
| OR_EXPAND
| ORGANIZATION
| OR_PREDICATES
| OTHER
| OUTER_JOIN_TO_ANTI
| OUTER_JOIN_TO_INNER
| OUTER
| OUTLINE_LEAF
| OUTLINE
| OUT_OF_LINE
| OVERFLOW
| OVERFLOW_NOMOVE
| OVERLAPS
| OVER
| OWNER
| OWNERSHIP
| OWN
| PACKAGE
| PACKAGES
| PARALLEL_INDEX
| PARALLEL
| PARAMETERS
| PARAM
| PARENT
| PARITY
| PARTIALLY
| PARTITION_HASH
| PARTITION_LIST
| PARTITION
| PARTITION_RANGE
| PARTITIONS
| PARTNUMINST
| PASSING
| PASSWORD_GRACE_TIME
| PASSWORD_LIFE_TIME
| PASSWORD_LOCK_TIME
| PASSWORD
| PASSWORD_REUSE_MAX
| PASSWORD_REUSE_TIME
| PASSWORD_VERIFY_FUNCTION
| PATH
| PATHS
| PBL_HS_BEGIN
| PBL_HS_END
| PCTINCREASE
| PCTTHRESHOLD
| PCTUSED
| PCTVERSION
| PENDING
| PERCENTILE_CONT
| PERCENTILE_DISC
| PERCENT_KEYWORD
| PERCENT_RANKM
| PERCENT_RANK
| PERFORMANCE
| PERMANENT
| PERMISSION
| PFILE
| PHYSICAL
| PIKEY
| PIV_GB
| PIVOT
| PIV_SSF
| PLACE_DISTINCT
| PLACE_GROUP_BY
| PLAN
| PLSCOPE_SETTINGS
| PLSQL_CCFLAGS
| PLSQL_CODE_TYPE
| PLSQL_DEBUG
| PLSQL_OPTIMIZE_LEVEL
| PLSQL_WARNINGS
| POINT
| POLICY
| POST_TRANSACTION
| POWERMULTISET_BY_CARDINALITY
| POWERMULTISET
| POWER
| PQ_DISTRIBUTE
| PQ_MAP
| PQ_NOMAP
| PREBUILT
| PRECEDES
| PRECEDING
| PRECISION
| PRECOMPUTE_SUBQUERY
| PREDICATE_REORDERS
| PREDICTION_BOUNDS
| PREDICTION_COST
| PREDICTION_DETAILS
| PREDICTION
| PREDICTION_PROBABILITY
| PREDICTION_SET
| PREPARE
| PRESENT
| PRESENTNNV
| PRESENTV
| PRESERVE
| PRESERVE_OID
| PREVIOUS
| PRIMARY
| PRIVATE
| PRIVATE_SGA
| PRIVILEGE
| PRIVILEGES
| PROCEDURAL
| PROCEDURE
| PROCESS
| PROFILE
| PROGRAM
| PROJECT
| PROPAGATE
| PROTECTED
| PROTECTION
| PULL_PRED
| PURGE
| PUSH_PRED
| PUSH_SUBQ
| PX_GRANULE
| PX_JOIN_FILTER
| QB_NAME
| QUERY_BLOCK
| QUERY
| QUEUE_CURR
| QUEUE
| QUEUE_ROWP
| QUIESCE
| QUORUM
| QUOTA
| RANDOM_LOCAL
| RANDOM
| RANGE
| RANKM
| RANK
| RAPIDLY
| RATIO_TO_REPORT
| RAWTOHEX
| RAWTONHEX
| RBA
| RBO_OUTLINE
| RDBA
| READ
| READS
| REAL
| REBALANCE
| REBUILD
| RECORDS_PER_BLOCK
| RECOVERABLE
| RECOVER
| RECOVERY
| RECYCLEBIN
| RECYCLE
| REDACTION
| REDO
| REDUCED
| REDUNDANCY
| REF_CASCADE_CURSOR
| REFERENCED
| REFERENCE
| REFERENCES
| REFERENCING
| REF
| REFRESH
| REFTOHEX
| REGEXP_COUNT
| REGEXP_INSTR
| REGEXP_LIKE
| REGEXP_REPLACE
| REGEXP_SUBSTR
| REGISTER
| REGR_AVGX
| REGR_AVGY
| REGR_COUNT
| REGR_INTERCEPT
| REGR_R2
| REGR_SLOPE
| REGR_SXX
| REGR_SXY
| REGR_SYY
| REGULAR
| REJECT
| REKEY
| RELATIONAL
| RELY
| REMAINDER
| REMOTE_MAPPED
| REMOVE
| REPAIR
| REPEAT
| REPLACE
| REPLICATION
| REQUIRED
| RESETLOGS
| RESET
| RESIZE
| RESOLVE
| RESOLVER
| RESPECT
| RESTORE_AS_INTERVALS
| RESTORE
| RESTRICT_ALL_REF_CONS
| RESTRICTED
| RESTRICT
| RESULT_CACHE
| RESUMABLE
| RESUME
| RETENTION
| RETRY_ON_ROW_CHANGE
| RETURNING
| RETURN
| REUSE
| REVERSE
| REWRITE
| REWRITE_OR_ERROR
| RIGHT
| ROLE
| ROLES
| ROLLBACK
| ROLLING
| ROLLUP
| ROUND
| ROWDEPENDENCIES
| ROWID
| ROWIDTOCHAR
| ROWIDTONCHAR
| ROW_LENGTH
| ROW
| ROW_NUMBER
| ROWNUM
| ROWS
| RPAD
| RTRIM
| RULE
| RULES
| SALT
| SAMPLE
| SAVE_AS_INTERVALS
| SAVEPOINT
| SB4
| SCALE
| SCALE_ROWS
| SCAN_INSTANCES
| SCAN
| SCHEDULER
| SCHEMACHECK
| SCHEMA
| SCN_ASCENDING
| SCN
| SCOPE
| SD_ALL
| SD_INHIBIT
| SD_SHOW
| SEARCH
| SECOND
| SECUREFILE_DBA
| SECUREFILE
| SECURITY
| SEED
| SEG_BLOCK
| SEG_FILE
| SEGMENT
| SELECTIVITY
| SEMIJOIN_DRIVER
| SEMIJOIN
| SEMI_TO_INNER
| SEQUENCED
| SEQUENCE
| SEQUENTIAL
| SERIALIZABLE
| SERVERERROR
| SESSION_CACHED_CURSORS
| SESSION
| SESSIONS_PER_USER
| SESSIONTIMEZONE
| SESSIONTZNAME
| SETS
| SETTINGS
| SET_TO_JOIN
| SEVERE
| SHARED
| SHARED_POOL
| SHOW
| SHRINK
| SHUTDOWN
| SIBLINGS
| SID
| SIGNAL_COMPONENT
| SIGNAL_FUNCTION
| SIGN
| SIMPLE
| SINGLE
| SINGLETASK
| SINH
| SIN
| SKIP_EXT_OPTIMIZER
| SKIP_
| SKIP_UNQ_UNUSABLE_IDX
| SKIP_UNUSABLE_INDEXES
| SMALLFILE
| SNAPSHOT
| SOME
| SORT
| SOUNDEX
| SOURCE
| SPACE_KEYWORD
| SPECIFICATION
| SPFILE
| SPLIT
| SPREADSHEET
| SQLLDR
| SQL
| SQL_TRACE
| SQRT
| STALE
| STANDALONE
| STANDBY_MAX_DATA_DELAY
| STANDBY
| STAR
| STAR_TRANSFORMATION
| STARTUP
| STATEMENT_ID
| STATEMENT_QUEUING
| STATEMENTS
| STATIC
| STATISTICS
| STATS_BINOMIAL_TEST
| STATS_CROSSTAB
| STATS_F_TEST
| STATS_KS_TEST
| STATS_MODE
| STATS_MW_TEST
| STATS_ONE_WAY_ANOVA
| STATS_T_TEST_INDEP
| STATS_T_TEST_INDEPU
| STATS_T_TEST_ONE
| STATS_T_TEST_PAIRED
| STATS_WSR_TEST
| STDDEV
| STDDEV_POP
| STDDEV_SAMP
| STOP
| STORAGE
| STORE
| STREAMS
| STRICT
| STRING
| STRIPE_COLUMNS
| STRIPE_WIDTH
| STRIP
| STRUCTURE
| SUBMULTISET
| SUBPARTITION
| SUBPARTITION_REL
| SUBPARTITIONS
| SUBQUERIES
| SUBQUERY_PRUNING
| SUBSTITUTABLE
| SUBSTR2
| SUBSTR4
| SUBSTRB
| SUBSTRC
| SUBSTR
| SUCCESSFUL
| SUMMARY
| SUM
| SUPPLEMENTAL
| SUSPEND
| SWAP_JOIN_INPUTS
| SWITCH
| SWITCHOVER
| SYNCHRONOUS
| SYNC
| SYSASM
| SYS_AUDIT
| SYSAUX
| SYS_CHECKACL
| SYS_CONNECT_BY_PATH
| SYS_CONTEXT
| SYSDATE
| SYSDBA
| SYS_DBURIGEN
| SYS_DL_CURSOR
| SYS_DM_RXFORM_CHR
| SYS_DM_RXFORM_NUM
| SYS_DOM_COMPARE
| SYS_DST_PRIM2SEC
| SYS_DST_SEC2PRIM
| SYS_ET_BFILE_TO_RAW
| SYS_ET_BLOB_TO_IMAGE
| SYS_ET_IMAGE_TO_BLOB
| SYS_ET_RAW_TO_BFILE
| SYS_EXTPDTXT
| SYS_EXTRACT_UTC
| SYS_FBT_INSDEL
| SYS_FILTER_ACLS
| SYS_FNMATCHES
| SYS_FNREPLACE
| SYS_GET_ACLIDS
| SYS_GET_PRIVILEGES
| SYS_GETTOKENID
| SYS_GETXTIVAL
| SYS_GUID
| SYS_MAKEXML
| SYS_MAKE_XMLNODEID
| SYS_MKXMLATTR
| SYS_OP_ADT2BIN
| SYS_OP_ADTCONS
| SYS_OP_ALSCRVAL
| SYS_OP_ATG
| SYS_OP_BIN2ADT
| SYS_OP_BITVEC
| SYS_OP_BL2R
| SYS_OP_BLOOM_FILTER_LIST
| SYS_OP_BLOOM_FILTER
| SYS_OP_C2C
| SYS_OP_CAST
| SYS_OP_CEG
| SYS_OP_CL2C
| SYS_OP_COMBINED_HASH
| SYS_OP_COMP
| SYS_OP_CONVERT
| SYS_OP_COUNTCHG
| SYS_OP_CSCONV
| SYS_OP_CSCONVTEST
| SYS_OP_CSR
| SYS_OP_CSX_PATCH
| SYS_OP_DECOMP
| SYS_OP_DESCEND
| SYS_OP_DISTINCT
| SYS_OP_DRA
| SYS_OP_DUMP
| SYS_OP_DV_CHECK
| SYS_OP_ENFORCE_NOT_NULL
| SYSOPER
| SYS_OP_EXTRACT
| SYS_OP_GROUPING
| SYS_OP_GUID
| SYS_OP_IIX
| SYS_OP_ITR
| SYS_OP_LBID
| SYS_OP_LOBLOC2BLOB
| SYS_OP_LOBLOC2CLOB
| SYS_OP_LOBLOC2ID
| SYS_OP_LOBLOC2NCLOB
| SYS_OP_LOBLOC2TYP
| SYS_OP_LSVI
| SYS_OP_LVL
| SYS_OP_MAKEOID
| SYS_OP_MAP_NONNULL
| SYS_OP_MSR
| SYS_OP_NICOMBINE
| SYS_OP_NIEXTRACT
| SYS_OP_NII
| SYS_OP_NIX
| SYS_OP_NOEXPAND
| SYS_OP_NTCIMG
| SYS_OP_NUMTORAW
| SYS_OP_OIDVALUE
| SYS_OP_OPNSIZE
| SYS_OP_PAR_1
| SYS_OP_PARGID_1
| SYS_OP_PARGID
| SYS_OP_PAR
| SYS_OP_PIVOT
| SYS_OP_R2O
| SYS_OP_RAWTONUM
| SYS_OP_RDTM
| SYS_OP_REF
| SYS_OP_RMTD
| SYS_OP_ROWIDTOOBJ
| SYS_OP_RPB
| SYS_OPTLOBPRBSC
| SYS_OP_TOSETID
| SYS_OP_TPR
| SYS_OP_TRTB
| SYS_OPTXICMP
| SYS_OPTXQCASTASNQ
| SYS_OP_UNDESCEND
| SYS_OP_VECAND
| SYS_OP_VECBIT
| SYS_OP_VECOR
| SYS_OP_VECXOR
| SYS_OP_VERSION
| SYS_OP_VREF
| SYS_OP_VVD
| SYS_OP_XMLCONS_FOR_CSX
| SYS_OP_XPTHATG
| SYS_OP_XPTHIDX
| SYS_OP_XPTHOP
| SYS_OP_XTXT2SQLT
| SYS_ORDERKEY_DEPTH
| SYS_ORDERKEY_MAXCHILD
| SYS_ORDERKEY_PARENT
| SYS_PARALLEL_TXN
| SYS_PATHID_IS_ATTR
| SYS_PATHID_IS_NMSPC
| SYS_PATHID_LASTNAME
| SYS_PATHID_LASTNMSPC
| SYS_PATH_REVERSE
| SYS_PXQEXTRACT
| SYS_RID_ORDER
| SYS_ROW_DELTA
| SYS_SC_2_XMLT
| SYS_SYNRCIREDO
| SYSTEM_DEFINED
| SYSTEM
| SYSTIMESTAMP
| SYS_TYPEID
| SYS_UMAKEXML
| SYS_XMLANALYZE
| SYS_XMLCONTAINS
| SYS_XMLCONV
| SYS_XMLEXNSURI
| SYS_XMLGEN
| SYS_XMLI_LOC_ISNODE
| SYS_XMLI_LOC_ISTEXT
| SYS_XMLINSTR
| SYS_XMLLOCATOR_GETSVAL
| SYS_XMLNODEID_GETCID
| SYS_XMLNODEID_GETLOCATOR
| SYS_XMLNODEID_GETOKEY
| SYS_XMLNODEID_GETPATHID
| SYS_XMLNODEID_GETPTRID
| SYS_XMLNODEID_GETRID
| SYS_XMLNODEID_GETSVAL
| SYS_XMLNODEID_GETTID
| SYS_XMLNODEID
| SYS_XMLT_2_SC
| SYS_XMLTRANSLATE
| SYS_XMLTYPE2SQL
| SYS_XQ_ASQLCNV
| SYS_XQ_ATOMCNVCHK
| SYS_XQBASEURI
| SYS_XQCASTABLEERRH
| SYS_XQCODEP2STR
| SYS_XQCODEPEQ
| SYS_XQCON2SEQ
| SYS_XQCONCAT
| SYS_XQDELETE
| SYS_XQDFLTCOLATION
| SYS_XQDOC
| SYS_XQDOCURI
| SYS_XQDURDIV
| SYS_XQED4URI
| SYS_XQENDSWITH
| SYS_XQERRH
| SYS_XQERR
| SYS_XQESHTMLURI
| SYS_XQEXLOBVAL
| SYS_XQEXSTWRP
| SYS_XQEXTRACT
| SYS_XQEXTRREF
| SYS_XQEXVAL
| SYS_XQFB2STR
| SYS_XQFNBOOL
| SYS_XQFNCMP
| SYS_XQFNDATIM
| SYS_XQFNLNAME
| SYS_XQFNNM
| SYS_XQFNNSURI
| SYS_XQFNPREDTRUTH
| SYS_XQFNQNM
| SYS_XQFNROOT
| SYS_XQFORMATNUM
| SYS_XQFTCONTAIN
| SYS_XQFUNCR
| SYS_XQGETCONTENT
| SYS_XQINDXOF
| SYS_XQINSERT
| SYS_XQINSPFX
| SYS_XQIRI2URI
| SYS_XQLANG
| SYS_XQLLNMFRMQNM
| SYS_XQMKNODEREF
| SYS_XQNILLED
| SYS_XQNODENAME
| SYS_XQNORMSPACE
| SYS_XQNORMUCODE
| SYS_XQ_NRNG
| SYS_XQNSP4PFX
| SYS_XQNSPFRMQNM
| SYS_XQPFXFRMQNM
| SYS_XQ_PKSQL2XML
| SYS_XQPOLYABS
| SYS_XQPOLYADD
| SYS_XQPOLYCEL
| SYS_XQPOLYCSTBL
| SYS_XQPOLYCST
| SYS_XQPOLYDIV
| SYS_XQPOLYFLR
| SYS_XQPOLYMOD
| SYS_XQPOLYMUL
| SYS_XQPOLYRND
| SYS_XQPOLYSQRT
| SYS_XQPOLYSUB
| SYS_XQPOLYUMUS
| SYS_XQPOLYUPLS
| SYS_XQPOLYVEQ
| SYS_XQPOLYVGE
| SYS_XQPOLYVGT
| SYS_XQPOLYVLE
| SYS_XQPOLYVLT
| SYS_XQPOLYVNE
| SYS_XQREF2VAL
| SYS_XQRENAME
| SYS_XQREPLACE
| SYS_XQRESVURI
| SYS_XQRNDHALF2EVN
| SYS_XQRSLVQNM
| SYS_XQRYENVPGET
| SYS_XQRYVARGET
| SYS_XQRYWRP
| SYS_XQSEQ2CON4XC
| SYS_XQSEQ2CON
| SYS_XQSEQDEEPEQ
| SYS_XQSEQINSB
| SYS_XQSEQRM
| SYS_XQSEQRVS
| SYS_XQSEQSUB
| SYS_XQSEQTYPMATCH
| SYS_XQSTARTSWITH
| SYS_XQSTATBURI
| SYS_XQSTR2CODEP
| SYS_XQSTRJOIN
| SYS_XQSUBSTRAFT
| SYS_XQSUBSTRBEF
| SYS_XQTOKENIZE
| SYS_XQTREATAS
| SYS_XQ_UPKXML2SQL
| SYS_XQXFORM
| TABLE
| TABLE_LOOKUP_BY_NL
| TABLES
| TABLESPACE
| TABLESPACE_NO
| TABLE_STATS
| TABNO
| TANH
| TAN
| TBLORIDXPARTNUM
| TEMPFILE
| TEMPLATE
| TEMPORARY
| TEMP_TABLE
| TEST
| THAN
| THE
| THEN
| THREAD
| THROUGH
| TIME
| TIMEOUT
| TIMES
| TIMESTAMP
| TIMEZONE_ABBR
| TIMEZONE_HOUR
| TIMEZONE_MINUTE
| TIME_ZONE
| TIMEZONE_OFFSET
| TIMEZONE_REGION
| TIV_GB
| TIV_SSF
| TO_BINARY_DOUBLE
| TO_BINARY_FLOAT
| TO_BLOB
| TO_CHAR
| TO_CLOB
| TO_DATE
| TO_DSINTERVAL
| TO_LOB
| TO_MULTI_BYTE
| TO_NCHAR
| TO_NCLOB
| TO_NUMBER
| TOPLEVEL
| TO_SINGLE_BYTE
| TO_TIME
| TO_TIMESTAMP
| TO_TIMESTAMP_TZ
| TO_TIME_TZ
| TO_YMINTERVAL
| TRACE
| TRACING
| TRACKING
| TRAILING
| TRANSACTION
| TRANSFORM_DISTINCT_AGG
| TRANSITIONAL
| TRANSITION
| TRANSLATE
| TREAT
| TRIGGERS
| TRIM
| TRUE
| TRUNCATE
| TRUNC
| TRUSTED
| TUNING
| TX
| TYPE
| TYPES
| TZ_OFFSET
| UB2
| UBA
| UID
| UNARCHIVED
| UNBOUNDED
| UNBOUND
| UNDER
| UNDO
| UNDROP
| UNIFORM
| UNISTR
| UNLIMITED
| UNLOAD
| UNLOCK
| UNNEST_INNERJ_DISTINCT_VIEW
| UNNEST
| UNNEST_NOSEMIJ_NODISTINCTVIEW
| UNNEST_SEMIJ_VIEW
| UNPACKED
| UNPIVOT
| UNPROTECTED
| UNQUIESCE
| UNRECOVERABLE
| UNRESTRICTED
| UNTIL
| UNUSABLE
| UNUSED
| UPDATABLE
| UPDATED
| UPDATEXML
| UPD_INDEXES
| UPD_JOININDEX
| UPGRADE
| UPPER
| UPSERT
| UROWID
| USAGE
| USE_ANTI
| USE_CONCAT
| USE_HASH_AGGREGATION
| USE_HASH_GBY_FOR_PUSHDOWN
| USE_HASH
| USE_INVISIBLE_INDEXES
| USE_MERGE_CARTESIAN
| USE_MERGE
| USE
| USE_NL
| USE_NL_WITH_INDEX
| USE_PRIVATE_OUTLINES
| USER_DEFINED
| USERENV
| USERGROUP
| USER
| USER_RECYCLEBIN
| USERS
| USE_SEMI
| USE_STORED_OUTLINES
| USE_TTT_FOR_GSETS
| USE_WEAK_NAME_RESL
| USING
| VALIDATE
| VALIDATION
| VALUE
| VARIANCE
| VAR_POP
| VARRAY
| VARRAYS
| VAR_SAMP
| VARYING
| VECTOR_READ
| VECTOR_READ_TRACE
| VERIFY
| VERSIONING
| VERSION
| VERSIONS_ENDSCN
| VERSIONS_ENDTIME
| VERSIONS
| VERSIONS_OPERATION
| VERSIONS_STARTSCN
| VERSIONS_STARTTIME
| VERSIONS_XID
| VIRTUAL
| VISIBLE
| VOLUME
| VSIZE
| WAIT
| WALLET
| WELLFORMED
| WHENEVER
| WHEN
| WHITESPACE
| WIDTH_BUCKET
| WITHIN
| WITHOUT
| WORK
| WRAPPED
| WRITE
| XDB_FASTPATH_INSERT
| X_DYN_PRUNE
| XID
| XML2OBJECT
| XMLATTRIBUTES
| XMLCAST
| XMLCDATA
| XMLCOLATTVAL
| XMLCOMMENT
| XMLCONCAT
| XMLDIFF
| XML_DML_RWT_STMT
| XMLELEMENT
| XMLEXISTS2
| XMLEXISTS
| XMLFOREST
| XMLINDEX_REWRITE_IN_SELECT
| XMLINDEX_REWRITE
| XMLINDEX_SEL_IDX_TBL
| XMLISNODE
| XMLISVALID
| XML
| XMLNAMESPACES
| XMLPARSE
| XMLPATCH
| XMLPI
| XMLQUERY
| XMLQUERYVAL
| XMLROOT
| XMLSCHEMA
| XMLSERIALIZE
| XMLTABLE
| XMLTRANSFORMBLOB
| XMLTRANSFORM
| XMLTYPE
| XPATHTABLE
| XS_SYS_CONTEXT
| YEAR
| YES
| ZONE
;