After manually massage sqlparse.yrl with some search and replace we can have a nice navigable railroad diagram.
Copy and paste the EBNF shown bellow on https://www.bottlecaps.de/rr/ui on the tab Edit Grammar the click on the tab View Diagram to see/download a navigable railroad diagram.
//From: https://github.com/KonnexionsGmbH/sqlparse/blob/master/src/sqlparse.yrl
//%%-----------------------------------------------------------------------------
//%%
//%%sqlparse.yrl
//%%
//%%Copyright (c) 2012-20 Konnexions GmbH. All Rights Reserved.
//%%
//%%-----------------------------------------------------------------------------
//Rootsymbol plsql_block_sql_list.
plsql_block_sql_list ::= plsql_block
plsql_block_sql_list ::= sql_list
plsql_block ::= plsql_body
sql_list ::= sql ';'
sql_list ::= sql ';' extra
sql_list ::= sql_list sql ';'
sql_list ::= sql_list sql ';' extra
extra ::= NAME ';'
//%%=============================================================================
//%%Helper definitions - test purposes.
//%%-----------------------------------------------------------------------------
//%sql ::= table_ref
//%%=============================================================================
sql ::= manipulative_statement
sql ::= schema
plsql_body ::= BEGIN statement_pragma_list END ';'
statement_pragma_list ::= statement_pragma ';'
statement_pragma_list ::= statement_pragma_list statement_pragma ';'
statement_pragma ::= assignment_statement
statement_pragma ::= close_statement
statement_pragma ::= commit_statement
statement_pragma ::= cursor_def
statement_pragma ::= delete_statement_positioned
statement_pragma ::= delete_statement_searched
statement_pragma ::= fetch_statement
statement_pragma ::= function_ref
statement_pragma ::= insert_statement
statement_pragma ::= open_statement
statement_pragma ::= procedure_call
statement_pragma ::= rollback_statement
statement_pragma ::= select_statement
statement_pragma ::= update_statement_positioned
statement_pragma ::= update_statement_searched
statement_pragma ::= WHENEVER NOT FOUND when_action
statement_pragma ::= WHENEVER SQLERROR when_action
assignment_statement ::= parameter ':=' scalar_opt_as_exp_1
procedure_call ::= CALL function_ref
//%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
//%%schema definition language
//%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
schema ::= CREATE SCHEMA AUTHORIZATION identifier
schema ::= CREATE SCHEMA AUTHORIZATION identifier schema_element_list
schema_element_list ::= schema_element
schema_element_list ::= schema_element_list schema_element
schema_element ::= create_table_def
schema_element ::= view_def
schema_element ::= grant_def
create_role_def ::= CREATE ROLE identifier
create_table_def ::= CREATE TABLE table '(' ')'
create_table_def ::= CREATE TABLE table '(' base_table_element_commalist ')'
create_table_def ::= CREATE create_opts TABLE table '(' ')'
create_table_def ::= CREATE create_opts TABLE table '(' base_table_element_commalist ')'
create_user_def ::= CREATE USER identifier identified
create_user_def ::= CREATE USER identifier identified user_opts_list
create_index_def ::= CREATE INDEX ON table_alias
create_index_def ::= CREATE INDEX ON table_alias create_index_filter
create_index_def ::= CREATE INDEX ON table_alias create_index_norm
create_index_def ::= CREATE INDEX ON table_alias create_index_norm create_index_filter
create_index_def ::= CREATE INDEX ON table_alias create_index_spec
create_index_def ::= CREATE INDEX ON table_alias create_index_spec create_index_filter
create_index_def ::= CREATE INDEX ON table_alias create_index_spec create_index_norm
create_index_def ::= CREATE INDEX ON table_alias create_index_spec create_index_norm create_index_filter
create_index_def ::= CREATE INDEX index_name ON table_alias
create_index_def ::= CREATE INDEX index_name ON table_alias create_index_filter
create_index_def ::= CREATE INDEX index_name ON table_alias create_index_norm
create_index_def ::= CREATE INDEX index_name ON table_alias create_index_norm create_index_filter
create_index_def ::= CREATE INDEX index_name ON table_alias create_index_spec
create_index_def ::= CREATE INDEX index_name ON table_alias create_index_spec create_index_filter
create_index_def ::= CREATE INDEX index_name ON table_alias create_index_spec create_index_norm create_index_filter
create_index_def ::= CREATE INDEX index_name ON table_alias create_index_spec create_index_norm
create_index_def ::= CREATE create_index_opts INDEX ON table_alias
create_index_def ::= CREATE create_index_opts INDEX ON table_alias create_index_filter
create_index_def ::= CREATE create_index_opts INDEX ON table_alias create_index_norm
create_index_def ::= CREATE create_index_opts INDEX ON table_alias create_index_norm create_index_filter
create_index_def ::= CREATE create_index_opts INDEX ON table_alias create_index_spec
create_index_def ::= CREATE create_index_opts INDEX ON table_alias create_index_spec create_index_filter
create_index_def ::= CREATE create_index_opts INDEX ON table_alias create_index_spec create_index_norm
create_index_def ::= CREATE create_index_opts INDEX ON table_alias create_index_spec create_index_norm create_index_filter
create_index_def ::= CREATE create_index_opts INDEX index_name ON table_alias
create_index_def ::= CREATE create_index_opts INDEX index_name ON table_alias create_index_filter
create_index_def ::= CREATE create_index_opts INDEX index_name ON table_alias create_index_norm
create_index_def ::= CREATE create_index_opts INDEX index_name ON table_alias create_index_norm create_index_filter
create_index_def ::= CREATE create_index_opts INDEX index_name ON table_alias create_index_spec
create_index_def ::= CREATE create_index_opts INDEX index_name ON table_alias create_index_spec create_index_filter
create_index_def ::= CREATE create_index_opts INDEX index_name ON table_alias create_index_spec create_index_norm
create_index_def ::= CREATE create_index_opts INDEX index_name ON table_alias create_index_spec create_index_norm create_index_filter
create_index_opts ::= BITMAP
create_index_opts ::= KEYLIST
create_index_opts ::= HASHMAP
create_index_opts ::= UNIQUE
index_name ::= identifier
index_name ::= identifier '.' identifier
create_index_spec ::= '(' create_index_spec_items ')'
create_index_spec_items ::= create_index_spec_column
create_index_spec_items ::= create_index_spec_column ',' create_index_spec_items
create_index_spec_column ::= identifier
create_index_spec_column ::= identifier JSON
create_index_norm ::= NORM_WITH STRING
create_index_filter ::= FILTER_WITH STRING
create_opts ::= tbl_type
create_opts ::= tbl_scope
create_opts ::= tbl_scope tbl_type
tbl_scope ::= LOCAL
tbl_scope ::= CLUSTER
tbl_scope ::= SCHEMA
tbl_type ::= SET
tbl_type ::= ORDERED_SET
tbl_type ::= BAG
tbl_type ::= NAME
alter_user_def ::= ALTER USER user_list proxy_clause
alter_user_def ::= ALTER USER identifier spec_list
alter_user_def ::= ALTER USER identifier NAME NAME
user_list ::= identifier
user_list ::= identifier ',' user_list
proxy_clause ::= GRANT CONNECT THROUGH ENTERPRISE USERS
proxy_clause ::= GRANT CONNECT THROUGH db_user_proxy
proxy_clause ::= REVOKE CONNECT THROUGH ENTERPRISE USERS
proxy_clause ::= REVOKE CONNECT THROUGH db_user_proxy
db_user_proxy ::= proxy_with
db_user_proxy ::= proxy_auth_req
db_user_proxy ::= proxy_with proxy_auth_req
proxy_with ::= WITH NO ROLES
proxy_with ::= WITH ROLE role_list
proxy_with ::= WITH ROLE ALL EXCEPT role_list
proxy_auth_req ::= AUTHENTICATION REQUIRED
spec_list ::= spec_item
spec_list ::= spec_item spec_list
spec_item ::= identified
spec_item ::= user_opt
spec_item ::= user_role
user_role ::= DEFAULT ROLE ALL
user_role ::= DEFAULT ROLE ALL EXCEPT role_list
user_role ::= DEFAULT ROLE NONE
user_role ::= DEFAULT ROLE role_list
role_list ::= NAME
role_list ::= NAME ',' role_list
identified ::= IDENTIFIED BY identifier
identified ::= IDENTIFIED EXTERNALLY
identified ::= IDENTIFIED EXTERNALLY AS identifier
identified ::= IDENTIFIED GLOBALLY
identified ::= IDENTIFIED GLOBALLY AS identifier
user_opts_list ::= user_opt
user_opts_list ::= user_opt user_opts_list
user_opt ::= DEFAULT TABLESPACE identifier
user_opt ::= TEMPORARY TABLESPACE identifier
user_opt ::= quota_list
user_opt ::= PROFILE identifier
quota_list ::= quota
quota_list ::= quota quota_list
quota ::= QUOTA UNLIMITED ON identifier
quota ::= QUOTA INTNUM ON identifier
quota ::= QUOTA INTNUM identifier ON identifier
table_list ::= table
table_list ::= table_list ',' table
exists ::= IF EXISTS
base_table_element_commalist ::= base_table_element
base_table_element_commalist ::= base_table_element_commalist ',' base_table_element
base_table_element ::= column_def
base_table_element ::= table_constraint_def
column_def ::= column data_type
column_def ::= column data_type column_def_list
column_def_list ::= column_def_opt
column_def_list ::= column_def_list column_def_opt
column_def_opt ::= NOT NULLX
column_def_opt ::= NOT NULLX UNIQUE
column_def_opt ::= NOT NULLX PRIMARY KEY
column_def_opt ::= DEFAULT function_ref
column_def_opt ::= DEFAULT identifier
column_def_opt ::= DEFAULT literal
column_def_opt ::= DEFAULT NULLX
column_def_opt ::= DEFAULT USER
column_def_opt ::= CHECK '(' search_condition ')'
column_def_opt ::= REFERENCES table
column_def_opt ::= REFERENCES table '(' column_commalist ')'
table_constraint_def ::= UNIQUE '(' column_commalist ')'
table_constraint_def ::= PRIMARY KEY '(' column_commalist ')'
table_constraint_def ::= FOREIGN KEY '(' column_commalist ')' REFERENCES table
table_constraint_def ::= FOREIGN KEY '(' column_commalist ')' REFERENCES table '(' column_commalist ')'
table_constraint_def ::= CHECK '(' search_condition ')'
table_constraint_def ::= CONSTRAINT identifier UNIQUE '(' column_commalist ')'
table_constraint_def ::= CONSTRAINT identifier PRIMARY KEY '(' column_commalist ')'
table_constraint_def ::= CONSTRAINT identifier FOREIGN KEY '(' column_commalist ')' REFERENCES table
table_constraint_def ::= CONSTRAINT identifier FOREIGN KEY '(' column_commalist ')' REFERENCES table '(' column_commalist ')'
table_constraint_def ::= CONSTRAINT identifier CHECK '(' search_condition ')'
column_commalist ::= column
column_commalist ::= column ',' column_commalist
view_def ::= CREATE VIEW table AS query_spec
view_def ::= CREATE VIEW table AS query_spec WITH CHECK OPTION
view_def ::= CREATE VIEW table '(' column_commalist ')' AS query_spec
view_def ::= CREATE VIEW table '(' column_commalist ')' AS query_spec WITH CHECK OPTION
grant_def ::= GRANT ALL PRIVILEGES on_obj_clause TO grantee_revokee_commalist
grant_def ::= GRANT object_privilege_list on_obj_clause TO grantee_revokee_commalist
grant_def ::= GRANT ALL PRIVILEGES on_obj_clause TO grantee_identified_by
grant_def ::= GRANT object_privilege_list on_obj_clause TO grantee_identified_by
grant_def ::= GRANT ALL PRIVILEGES on_obj_clause TO grantee_revokee_commalist object_with_grant_option
grant_def ::= GRANT object_privilege_list on_obj_clause TO grantee_revokee_commalist object_with_grant_option
grant_def ::= GRANT ALL PRIVILEGES on_obj_clause TO grantee_identified_by object_with_grant_option
grant_def ::= GRANT object_privilege_list on_obj_clause TO grantee_identified_by object_with_grant_option
grant_def ::= GRANT ALL PRIVILEGES TO grantee_revokee_commalist
grant_def ::= GRANT system_privilege_list TO grantee_revokee_commalist
grant_def ::= GRANT ALL PRIVILEGES TO grantee_identified_by
grant_def ::= GRANT system_privilege_list TO grantee_identified_by
grant_def ::= GRANT ALL PRIVILEGES TO grantee_revokee_commalist system_with_grant_option
grant_def ::= GRANT system_privilege_list TO grantee_revokee_commalist system_with_grant_option
grant_def ::= GRANT ALL PRIVILEGES TO grantee_identified_by system_with_grant_option
grant_def ::= GRANT system_privilege_list TO grantee_identified_by system_with_grant_option
revoke_def ::= REVOKE ALL PRIVILEGES on_obj_clause FROM grantee_revokee_commalist
revoke_def ::= REVOKE object_privilege_list on_obj_clause FROM grantee_revokee_commalist
revoke_def ::= REVOKE ALL PRIVILEGES on_obj_clause FROM grantee_revokee_commalist object_with_revoke_option
revoke_def ::= REVOKE object_privilege_list on_obj_clause FROM grantee_revokee_commalist object_with_revoke_option
revoke_def ::= REVOKE ALL PRIVILEGES FROM grantee_revokee_commalist
revoke_def ::= REVOKE system_privilege_list FROM grantee_revokee_commalist
grantee_identified_by ::= identifier IDENTIFIED BY STRING
grantee_revokee ::= identifier
grantee_revokee ::= PUBLIC
grantee_revokee_commalist ::= grantee_revokee
grantee_revokee_commalist ::= grantee_revokee_commalist ',' grantee_revokee
object_privilege ::= ALL
object_privilege ::= ALTER
object_privilege ::= DELETE
object_privilege ::= EXECUTE
object_privilege ::= INDEX
object_privilege ::= INSERT
object_privilege ::= REFERENCES
object_privilege ::= SELECT
object_privilege ::= UPDATE
object_privilege_list ::= object_privilege
object_privilege_list ::= object_privilege ',' object_privilege_list
object_with_grant_option ::= WITH GRANT OPTION
object_with_grant_option ::= WITH HIERARCHY OPTION
object_with_revoke_option ::= CASCADE CONSTRAINTS
object_with_revoke_option ::= FORCE
on_obj_clause ::= ON DIRECTORY identifier
on_obj_clause ::= ON table
system_privilege ::= ADMIN
system_privilege ::= ALTER ANY INDEX
system_privilege ::= ALTER ANY MATERIALIZED VIEW
system_privilege ::= ALTER ANY TABLE
system_privilege ::= ALTER ANY VIEW
system_privilege ::= CREATE ANY INDEX
system_privilege ::= CREATE ANY MATERIALIZED VIEW
system_privilege ::= CREATE ANY TABLE
system_privilege ::= CREATE ANY VIEW
system_privilege ::= CREATE MATERIALIZED VIEW
system_privilege ::= CREATE TABLE
system_privilege ::= CREATE VIEW
system_privilege ::= DELETE ANY TABLE
system_privilege ::= DROP ANY INDEX
system_privilege ::= DROP ANY MATERIALIZED VIEW
system_privilege ::= DROP ANY TABLE
system_privilege ::= DROP ANY VIEW
system_privilege ::= INSERT ANY TABLE
system_privilege ::= SELECT ANY TABLE
system_privilege ::= UPDATE ANY TABLE
system_privilege ::= NAME
system_privilege_list ::= system_privilege
system_privilege_list ::= system_privilege ',' system_privilege_list
system_with_grant_option ::= WITH ADMIN OPTION
system_with_grant_option ::= WITH DELEGATE OPTION
//%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
//%%cursor definition
//%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
cursor_def ::= CURSOR cursor IS query_exp
order_by_clause ::= ORDER BY ordering_spec_commalist
ordering_spec_commalist ::= ordering_spec
ordering_spec_commalist ::= ordering_spec_commalist ',' ordering_spec
ordering_spec ::= scalar_exp
ordering_spec ::= scalar_exp asc_desc
asc_desc ::= ASC
asc_desc ::= DESC
//%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
//%%manipulative statements
//%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
manipulative_statement ::= alter_user_def
manipulative_statement ::= create_index_def
manipulative_statement ::= create_role_def
manipulative_statement ::= create_table_def
manipulative_statement ::= create_user_def
manipulative_statement ::= delete_statement_positioned
manipulative_statement ::= delete_statement_searched
manipulative_statement ::= drop_context_def
manipulative_statement ::= drop_database_def
manipulative_statement ::= drop_database_link_def
manipulative_statement ::= drop_directory_def
manipulative_statement ::= drop_function_def
manipulative_statement ::= drop_index_def
manipulative_statement ::= drop_materialized_view_def
manipulative_statement ::= drop_package_def
manipulative_statement ::= drop_procedure_def
manipulative_statement ::= drop_profile_def
manipulative_statement ::= drop_role_def
manipulative_statement ::= drop_sequence_def
manipulative_statement ::= drop_synonym_def
manipulative_statement ::= drop_table_def
manipulative_statement ::= drop_tablespace_def
manipulative_statement ::= drop_trigger_def
manipulative_statement ::= drop_type_def
manipulative_statement ::= drop_type_body_def
manipulative_statement ::= drop_user_def
manipulative_statement ::= drop_view_def
manipulative_statement ::= grant_def
manipulative_statement ::= insert_statement
manipulative_statement ::= revoke_def
manipulative_statement ::= select_statement
manipulative_statement ::= truncate_table
manipulative_statement ::= update_statement_positioned
manipulative_statement ::= update_statement_searched
manipulative_statement ::= view_def
close_statement ::= CLOSE cursor
commit_statement ::= COMMIT
commit_statement ::= COMMIT WORK
delete_statement_positioned ::= DELETE FROM table_dblink WHERE CURRENT OF cursor
delete_statement_positioned ::= DELETE FROM table_dblink WHERE CURRENT OF cursor returning
delete_statement_searched ::= DELETE FROM table_dblink
delete_statement_searched ::= DELETE FROM table_dblink returning
delete_statement_searched ::= DELETE FROM table_dblink where_clause
delete_statement_searched ::= DELETE FROM table_dblink where_clause returning
drop_context_def ::= DROP CONTEXT identifier
drop_database_def ::= DROP DATABASE
drop_database_link_def ::= DROP DATABASE LINK DBLINK
drop_database_link_def ::= DROP PUBLIC DATABASE LINK DBLINK
drop_directory_def ::= DROP DIRECTORY identifier
drop_function_def ::= DROP FUNCTION function_name
function_name ::= NAME
function_name ::= identifier '.' NAME
drop_index_def ::= DROP INDEX FROM table
drop_index_def ::= DROP INDEX FROM table drop_index_extensions
drop_index_def ::= DROP INDEX index_name
drop_index_def ::= DROP INDEX index_name drop_index_extensions
drop_index_def ::= DROP INDEX index_name FROM table
drop_index_def ::= DROP INDEX index_name FROM table drop_index_extensions
drop_index_extensions ::= DEFERRED INVALIDATION
drop_index_extensions ::= IMMEDIATE INVALIDATION
drop_index_extensions ::= FORCE
drop_index_extensions ::= FORCE DEFERRED INVALIDATION
drop_index_extensions ::= FORCE IMMEDIATE INVALIDATION
drop_index_extensions ::= ONLINE
drop_index_extensions ::= ONLINE DEFERRED INVALIDATION
drop_index_extensions ::= ONLINE IMMEDIATE INVALIDATION
drop_index_extensions ::= ONLINE FORCE
drop_index_extensions ::= ONLINE FORCE DEFERRED INVALIDATION
drop_index_extensions ::= ONLINE FORCE IMMEDIATE INVALIDATION
drop_materialized_view_def ::= DROP MATERIALIZED VIEW materialized_view_name
drop_materialized_view_def ::= DROP MATERIALIZED VIEW materialized_view_name PRESERVE TABLE
materialized_view_name ::= identifier
materialized_view_name ::= identifier '.' identifier
drop_package_def ::= DROP PACKAGE package_name
drop_package_def ::= DROP PACKAGE BODY package_name
package_name ::= identifier
package_name ::= identifier '.' identifier
drop_procedure_def ::= DROP PROCEDURE procedure_name
procedure_name ::= identifier
procedure_name ::= identifier '.' identifier
drop_profile_def ::= DROP PROFILE identifier
drop_profile_def ::= DROP PROFILE identifier CASCADE
drop_role_def ::= DROP ROLE identifier
drop_sequence_def ::= DROP SEQUENCE sequence_name
sequence_name ::= identifier
sequence_name ::= identifier '.' identifier
drop_synonym_def ::= DROP SYNONYM synonym_name
drop_synonym_def ::= DROP SYNONYM synonym_name FORCE
drop_synonym_def ::= DROP PUBLIC SYNONYM synonym_name
drop_synonym_def ::= DROP PUBLIC SYNONYM synonym_name FORCE
synonym_name ::= identifier
synonym_name ::= identifier '.' identifier
drop_table_def ::= DROP TABLE table_list
drop_table_def ::= DROP TABLE table_list drop_table_extensions
drop_table_def ::= DROP TABLE exists table_list
drop_table_def ::= DROP TABLE exists table_list drop_table_extensions
drop_table_def ::= DROP create_opts TABLE table_list
drop_table_def ::= DROP create_opts TABLE table_list drop_table_extensions
drop_table_def ::= DROP create_opts TABLE exists table_list
drop_table_def ::= DROP create_opts TABLE exists table_list drop_table_extensions
drop_table_extensions ::= PURGE
drop_table_extensions ::= CASCADE CONSTRAINTS
drop_table_extensions ::= CASCADE CONSTRAINTS PURGE
drop_tablespace_def ::= DROP TABLESPACE identifier
drop_tablespace_def ::= DROP TABLESPACE identifier drop_tablespace_extensions
drop_tablespace_extensions ::= INCLUDING CONTENTS
drop_tablespace_extensions ::= INCLUDING CONTENTS CASCADE CONSTRAINTS
drop_tablespace_extensions ::= INCLUDING CONTENTS AND DATAFILES CASCADE CONSTRAINTS
drop_tablespace_extensions ::= INCLUDING CONTENTS KEEP DATAFILES CASCADE CONSTRAINTS
drop_tablespace_extensions ::= DROP QUOTA
drop_tablespace_extensions ::= DROP QUOTA INCLUDING CONTENTS
drop_tablespace_extensions ::= DROP QUOTA INCLUDING CONTENTS CASCADE CONSTRAINTS
drop_tablespace_extensions ::= DROP QUOTA INCLUDING CONTENTS AND DATAFILES CASCADE CONSTRAINTS
drop_tablespace_extensions ::= DROP QUOTA INCLUDING CONTENTS KEEP DATAFILES CASCADE CONSTRAINTS
drop_tablespace_extensions ::= KEEP QUOTA
drop_tablespace_extensions ::= KEEP QUOTA INCLUDING CONTENTS
drop_tablespace_extensions ::= KEEP QUOTA INCLUDING CONTENTS CASCADE CONSTRAINTS
drop_tablespace_extensions ::= KEEP QUOTA INCLUDING CONTENTS AND DATAFILES CASCADE CONSTRAINTS
drop_tablespace_extensions ::= KEEP QUOTA INCLUDING CONTENTS KEEP DATAFILES CASCADE CONSTRAINTS
drop_trigger_def ::= DROP TRIGGER trigger_name
trigger_name ::= identifier
trigger_name ::= identifier '.' identifier
drop_type_def ::= DROP TYPE type_name
drop_type_def ::= DROP TYPE type_name FORCE
drop_type_def ::= DROP TYPE type_name VALIDATE
type_name ::= identifier
type_name ::= identifier '.' identifier
drop_type_body_def ::= DROP TYPE BODY type_name
drop_user_def ::= DROP USER identifier
drop_user_def ::= DROP USER identifier CASCADE
drop_view_def ::= DROP VIEW table
drop_view_def ::= DROP VIEW table CASCADE CONSTRAINTS
fetch_statement ::= FETCH cursor INTO target_commalist
insert_statement ::= INSERT INTO table_dblink
insert_statement ::= INSERT INTO table_dblink returning
insert_statement ::= INSERT INTO table_dblink values_or_query_spec
insert_statement ::= INSERT INTO table_dblink values_or_query_spec returning
insert_statement ::= INSERT INTO table_dblink '(' column_commalist ')' values_or_query_spec
insert_statement ::= INSERT INTO table_dblink '(' column_commalist ')' values_or_query_spec returning
values_or_query_spec ::= VALUES '(' insert_atom_commalist ')'
values_or_query_spec ::= query_spec
values_or_query_spec ::= '(' query_spec ')'
insert_atom_commalist ::= insert_atom
insert_atom_commalist ::= insert_atom_commalist ',' insert_atom
insert_atom ::= scalar_opt_as_exp
open_statement ::= OPEN cursor
rollback_statement ::= ROLLBACK
rollback_statement ::= ROLLBACK WORK
select_statement ::= query_exp
hint ::= HINT
all_distinct ::= ALL
all_distinct ::= DISTINCT
truncate_table ::= TRUNCATE TABLE table
truncate_table ::= TRUNCATE TABLE table CASCADE
truncate_table ::= TRUNCATE TABLE table storage
truncate_table ::= TRUNCATE TABLE table storage CASCADE
truncate_table ::= TRUNCATE TABLE table materialized
truncate_table ::= TRUNCATE TABLE table materialized CASCADE
truncate_table ::= TRUNCATE TABLE table materialized storage
truncate_table ::= TRUNCATE TABLE table materialized storage CASCADE
materialized ::= PRESERVE MATERIALIZED VIEW LOG
materialized ::= PURGE MATERIALIZED VIEW LOG
storage ::= DROP STORAGE
storage ::= DROP ALL STORAGE
storage ::= REUSE STORAGE
update_statement_positioned ::= UPDATE table_dblink SET assignment_commalist WHERE CURRENT OF cursor
update_statement_positioned ::= UPDATE table_dblink SET assignment_commalist WHERE CURRENT OF cursor returning
assignment_commalist ::= assignment
assignment_commalist ::= assignment_commalist ',' assignment
assignment ::= column '=' scalar_opt_as_exp
update_statement_searched ::= UPDATE table_dblink SET assignment_commalist
update_statement_searched ::= UPDATE table_dblink SET assignment_commalist returning
update_statement_searched ::= UPDATE table_dblink SET assignment_commalist where_clause
update_statement_searched ::= UPDATE table_dblink SET assignment_commalist where_clause returning
target_commalist ::= target
target_commalist ::= target_commalist ',' target
target ::= identifier
target ::= parameter_ref
//%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
//%%query expressions
//%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
query_exp ::= query_term
query_exp ::= query_exp UNION query_term
query_exp ::= query_exp UNION ALL query_term
query_exp ::= query_exp INTERSECT query_term
query_exp ::= query_exp MINUS query_term
returning ::= RETURNING selection INTO selection
returning ::= RETURN selection INTO selection
query_term ::= query_spec
query_term ::= '(' query_exp ')'
query_term ::= '(' query_exp ')' JSON
query_spec ::= SELECT selection table_exp
query_spec ::= SELECT selection into table_exp
query_spec ::= SELECT all_distinct selection table_exp
query_spec ::= SELECT all_distinct selection into table_exp
query_spec ::= SELECT hint selection table_exp
query_spec ::= SELECT hint selection into table_exp
query_spec ::= SELECT hint all_distinct selection table_exp
query_spec ::= SELECT hint all_distinct selection into table_exp
into ::= INTO target_commalist
selection ::= select_field_commalist
select_field ::= case_when_opt_as_exp
select_field ::= scalar_opt_as_exp
select_field ::= '*'
select_field_commalist ::= select_field
select_field_commalist ::= select_field_commalist ',' select_field
case_when_opt_as_exp ::= case_when_exp
case_when_opt_as_exp ::= case_when_exp NAME
case_when_opt_as_exp ::= case_when_exp AS NAME
case_when_exp ::= CASE case_when_then_list END
case_when_exp ::= CASE case_when_then_list else END
case_when_exp ::= CASE scalar_opt_as_exp case_when_then_list END
case_when_exp ::= CASE scalar_opt_as_exp case_when_then_list else END
case_when_exp ::= '(' case_when_exp ')'
case_when_then_list ::= case_when_then
case_when_then_list ::= case_when_then case_when_then_list
case_when_then ::= WHEN search_condition THEN scalar_opt_as_exp
else ::= ELSE scalar_opt_as_exp
table_exp ::= from_clause
table_exp ::= from_clause order_by_clause
table_exp ::= from_clause having_clause
table_exp ::= from_clause having_clause order_by_clause
table_exp ::= from_clause group_by_clause
table_exp ::= from_clause group_by_clause order_by_clause
table_exp ::= from_clause group_by_clause having_clause
table_exp ::= from_clause group_by_clause having_clause order_by_clause
table_exp ::= from_clause hierarchical_query_clause
table_exp ::= from_clause hierarchical_query_clause order_by_clause
table_exp ::= from_clause hierarchical_query_clause having_clause
table_exp ::= from_clause hierarchical_query_clause having_clause order_by_clause
table_exp ::= from_clause hierarchical_query_clause group_by_clause
table_exp ::= from_clause hierarchical_query_clause group_by_clause order_by_clause
table_exp ::= from_clause hierarchical_query_clause group_by_clause having_clause
table_exp ::= from_clause hierarchical_query_clause group_by_clause having_clause order_by_clause
table_exp ::= from_clause where_clause
table_exp ::= from_clause where_clause order_by_clause
table_exp ::= from_clause where_clause having_clause
table_exp ::= from_clause where_clause having_clause order_by_clause
table_exp ::= from_clause where_clause group_by_clause
table_exp ::= from_clause where_clause group_by_clause order_by_clause
table_exp ::= from_clause where_clause group_by_clause having_clause
table_exp ::= from_clause where_clause group_by_clause having_clause order_by_clause
table_exp ::= from_clause where_clause hierarchical_query_clause
table_exp ::= from_clause where_clause hierarchical_query_clause order_by_clause
table_exp ::= from_clause where_clause hierarchical_query_clause having_clause
table_exp ::= from_clause where_clause hierarchical_query_clause having_clause order_by_clause
table_exp ::= from_clause where_clause hierarchical_query_clause group_by_clause
table_exp ::= from_clause where_clause hierarchical_query_clause group_by_clause order_by_clause
table_exp ::= from_clause where_clause hierarchical_query_clause group_by_clause having_clause
table_exp ::= from_clause where_clause hierarchical_query_clause group_by_clause having_clause order_by_clause
from_clause ::= FROM from_column_commalist
from_column ::= table_ref
from_column ::= '(' join_clause ')'
from_column ::= join_clause
from_column_commalist ::= from_column
from_column_commalist ::= from_column_commalist ',' from_column
join_clause ::= table_ref join_list
join ::= inner_cross_join
join ::= outer_join
join_list ::= join
join_list ::= join_list join
inner_cross_join ::= JOIN join_ref join_on_or_using_clause
inner_cross_join ::= CROSS JOIN join_ref
inner_cross_join ::= INNER JOIN join_ref join_on_or_using_clause
inner_cross_join ::= NATURAL JOIN join_ref
inner_cross_join ::= NATURAL INNER JOIN join_ref
join_on_or_using_clause ::= ON search_condition
join_on_or_using_clause ::= USING '(' select_field_commalist ')'
//%----------------------------------------------------------------------------------------------- {{join_type, partition, opt_natural} ... }
outer_join ::= outer_join_type JOIN join_ref join_on_or_using_clause
outer_join ::= outer_join_type JOIN join_ref
outer_join ::= outer_join_type JOIN join_ref query_partition_clause
outer_join ::= outer_join_type JOIN join_ref query_partition_clause join_on_or_using_clause
outer_join ::= NATURAL outer_join_type JOIN join_ref join_on_or_using_clause
outer_join ::= NATURAL outer_join_type JOIN join_ref
outer_join ::= NATURAL outer_join_type JOIN join_ref query_partition_clause
outer_join ::= NATURAL outer_join_type JOIN join_ref query_partition_clause join_on_or_using_clause
outer_join ::= query_partition_clause outer_join_type JOIN join_ref join_on_or_using_clause
outer_join ::= query_partition_clause outer_join_type JOIN join_ref
outer_join ::= query_partition_clause outer_join_type JOIN join_ref query_partition_clause
outer_join ::= query_partition_clause outer_join_type JOIN join_ref query_partition_clause join_on_or_using_clause
outer_join ::= query_partition_clause NATURAL outer_join_type JOIN join_ref join_on_or_using_clause
outer_join ::= query_partition_clause NATURAL outer_join_type JOIN join_ref
outer_join ::= query_partition_clause NATURAL outer_join_type JOIN join_ref query_partition_clause
outer_join ::= query_partition_clause NATURAL outer_join_type JOIN join_ref query_partition_clause join_on_or_using_clause
//%-----------------------------------------------------------------------------------------------
query_partition_clause ::= PARTITION BY scalar_exp_commalist
query_partition_clause ::= PARTITION BY '(' scalar_exp_commalist ')'
outer_join_type ::= FULL
outer_join_type ::= FULL OUTER
outer_join_type ::= LEFT
outer_join_type ::= LEFT OUTER
outer_join_type ::= RIGHT
outer_join_type ::= RIGHT OUTER
table_ref ::= table_dblink
table_ref ::= query_term
table_ref ::= query_term NAME
join_ref ::= table_dblink
join_ref ::= query_term
join_ref ::= query_term NAME
hierarchical_query_clause ::= START WITH search_condition CONNECT BY search_condition
hierarchical_query_clause ::= START WITH search_condition CONNECT BY nocycle search_condition
hierarchical_query_clause ::= CONNECT BY search_condition START WITH search_condition
hierarchical_query_clause ::= CONNECT BY nocycle search_condition START WITH search_condition
nocycle ::= NOCYCLE
where_clause ::= WHERE search_condition
group_by_clause ::= GROUP BY column_ref_commalist
column_ref_commalist ::= column_ref
column_ref_commalist ::= function_ref
column_ref_commalist ::= column_ref_commalist ',' column_ref
column_ref_commalist ::= column_ref_commalist ',' function_ref
having_clause ::= HAVING search_condition
//%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
//%%search conditions
//%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
search_condition ::= search_condition OR search_condition
search_condition ::= search_condition AND search_condition
search_condition ::= NOT search_condition
search_condition ::= '(' search_condition ')'
search_condition ::= predicate
predicate ::= comparison_predicate
predicate ::= between_predicate
predicate ::= like_predicate
predicate ::= test_for_null
predicate ::= in_predicate
predicate ::= all_or_any_predicate
predicate ::= existence_test
comparison_predicate ::= scalar_opt_as_exp
comparison_predicate ::= scalar_exp '=' PRIOR scalar_exp
comparison_predicate ::= scalar_exp COMPARISON PRIOR scalar_exp
comparison_predicate ::= PRIOR scalar_exp '=' scalar_exp
comparison_predicate ::= PRIOR scalar_exp COMPARISON scalar_exp
between_predicate ::= scalar_exp BETWEEN scalar_exp AND scalar_exp
between_predicate ::= scalar_exp not_between scalar_exp AND scalar_exp
not_between ::= NOT BETWEEN
like_predicate ::= scalar_exp LIKE scalar_exp
like_predicate ::= scalar_exp LIKE scalar_exp escape
like_predicate ::= scalar_exp not_like scalar_exp
like_predicate ::= scalar_exp not_like scalar_exp escape
not_like ::= NOT LIKE
escape ::= ESCAPE atom
test_for_null ::= scalar_exp is_null
test_for_null ::= scalar_exp is_not_null
is_not_null ::= IS NOT NULLX
is_null ::= IS NULLX
in_predicate ::= scalar_exp IN '(' scalar_exp_commalist ')'
in_predicate ::= scalar_exp IN '(' subquery ')'
in_predicate ::= scalar_exp not_in '(' scalar_exp_commalist ')'
in_predicate ::= scalar_exp not_in '(' subquery ')'
not_in ::= NOT IN
all_or_any_predicate ::= scalar_exp '=' any_all_some subquery
all_or_any_predicate ::= scalar_exp COMPARISON any_all_some subquery
any_all_some ::= ANY
any_all_some ::= ALL
any_all_some ::= SOME
existence_test ::= EXISTS subquery
//%Optional plus (+) is not supported in table_collection_expression:
//%
//%The optional plus (+) is relevant if you are joining the TABLE collection expression with
//%the parent table. The + creates an outer join of the two, so that the query returns rows
//%from the outer table even if the collection expression is null.
table_coll_expr ::= TABLE '(' column_ref ')'
table_coll_expr ::= TABLE '(' function_ref ')'
table_coll_expr ::= TABLE '(' subquery ')'
subquery ::= query_exp
//%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
//%%scalar expressions
//%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
scalar_opt_as_exp_1 ::= scalar_exp
scalar_opt_as_exp_1 ::= scalar_exp '=' scalar_exp
scalar_opt_as_exp_1 ::= scalar_exp COMPARISON scalar_exp
scalar_opt_as_exp_2 ::= scalar_exp NAME
scalar_opt_as_exp_2 ::= scalar_exp AS NAME
scalar_opt_as_exp ::= scalar_opt_as_exp_1
scalar_opt_as_exp ::= scalar_opt_as_exp_2
scalar_exp ::= scalar_sub_exp '||' scalar_exp
scalar_exp ::= scalar_sub_exp
scalar_sub_exp ::= scalar_sub_exp '+' scalar_sub_exp
scalar_sub_exp ::= scalar_sub_exp '-' scalar_sub_exp
scalar_sub_exp ::= scalar_sub_exp '*' scalar_sub_exp
scalar_sub_exp ::= scalar_sub_exp '/' scalar_sub_exp
scalar_sub_exp ::= scalar_sub_exp 'div' scalar_sub_exp
scalar_sub_exp ::= unary_add_or_subtract scalar_sub_exp
scalar_sub_exp ::= NULLX
scalar_sub_exp ::= atom
scalar_sub_exp ::= subquery
scalar_sub_exp ::= column_ref
scalar_sub_exp ::= function_ref
scalar_sub_exp ::= '(' scalar_sub_exp ')'
scalar_sub_exp ::= '(' scalar_sub_exp ')' JSON
unary_add_or_subtract ::= '+'
unary_add_or_subtract ::= '-'
scalar_exp_commalist ::= scalar_opt_as_exp
scalar_exp_commalist ::= scalar_exp_commalist ',' scalar_opt_as_exp
atom ::= parameter_ref
atom ::= literal
atom ::= USER
parameter_ref ::= parameter
parameter_ref ::= parameter parameter
parameter_ref ::= parameter INDICATOR parameter
function_ref ::= function_ref JSON
function_ref ::= FUNS
function_ref ::= FUNS '(' ')'
function_ref ::= FUNS '(' '*' ')'
function_ref ::= FUNS '(' ALL scalar_exp ')'
function_ref ::= FUNS '(' DISTINCT column_ref ')'
function_ref ::= FUNS '(' fun_args ')'
function_ref ::= FUNS '(' fun_args_named ')'
function_ref ::= identifier '(' ')'
function_ref ::= identifier '(' fun_args ')'
function_ref ::= identifier '(' fun_args_named ')'
function_ref ::= identifier '.' identifier '(' ')'
function_ref ::= identifier '.' identifier '(' fun_args ')'
function_ref ::= identifier '.' identifier '(' fun_args_named ')'
function_ref ::= identifier '.' identifier '.' identifier '(' ')'
function_ref ::= identifier '.' identifier '.' identifier '(' fun_args ')'
function_ref ::= identifier '.' identifier '.' identifier '(' fun_args_named ')'
fun_args ::= fun_arg
fun_args ::= fun_arg ',' fun_args
fun_arg ::= '(' fun_arg ')'
fun_arg ::= atom
fun_arg ::= case_when_exp
fun_arg ::= column_ref
fun_arg ::= fun_arg NAME
fun_arg ::= fun_arg '*' fun_arg
fun_arg ::= fun_arg '+' fun_arg
fun_arg ::= fun_arg '-' fun_arg
fun_arg ::= fun_arg '/' fun_arg
fun_arg ::= fun_arg '=' fun_arg
fun_arg ::= fun_arg 'div' fun_arg
fun_arg ::= fun_arg '||' fun_arg
fun_arg ::= fun_arg AS NAME
fun_arg ::= fun_arg COMPARISON fun_arg
fun_arg ::= function_ref
fun_arg ::= NULLX
fun_arg ::= subquery
fun_arg ::= unary_add_or_subtract fun_arg
fun_args_named ::= fun_arg_named
fun_args_named ::= fun_arg_named ',' fun_args_named
fun_arg_named ::= identifier '=>' identifier
fun_arg_named ::= identifier '=>' literal
fun_arg_named ::= identifier '=>' parameter
literal ::= STRING
literal ::= INTNUM
literal ::= APPROXNUM
//%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
//%%miscellaneous
//%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
table ::= identifier
table ::= identifier '.' identifier
table ::= parameter
table_alias ::= identifier NAME
table_alias ::= identifier '.' identifier NAME
table_alias ::= parameter NAME
table_alias ::= table
table_dblink ::= identifier DBLINK
table_dblink ::= identifier DBLINK NAME
table_dblink ::= identifier '.' identifier DBLINK
table_dblink ::= identifier '.' identifier DBLINK NAME
table_dblink ::= parameter DBLINK
table_dblink ::= parameter DBLINK NAME
table_dblink ::= table_alias
table_dblink ::= table_coll_expr
column_ref ::= identifier
column_ref ::= identifier '(' '+' ')'
column_ref ::= identifier JSON
column_ref ::= identifier '.' '*'
column_ref ::= identifier '.' identifier
column_ref ::= identifier '.' identifier '(' '+' ')'
column_ref ::= identifier '.' identifier JSON
column_ref ::= identifier '.' identifier '.' '*'
column_ref ::= identifier '.' identifier '.' identifier
column_ref ::= identifier '.' identifier '.' identifier '(' '+' ')'
column_ref ::= identifier '.' identifier '.' identifier JSON
//%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
//%%data types
//%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
data_type ::= BFILE
data_type ::= BINARY_DOUBLE
data_type ::= BINARY_FLOAT
data_type ::= BLOB
data_type ::= CHAR
data_type ::= CLOB
data_type ::= DATE
data_type ::= FLOAT
data_type ::= LONG
data_type ::= LONG RAW
data_type ::= NAME
data_type ::= identifier '.' NAME
data_type ::= NCLOB
data_type ::= NUMBER
data_type ::= RAW
data_type ::= ROWID
data_type ::= STRING
data_type ::= TIMESTAMP
data_type ::= UROWID
data_type ::= VARCHAR2
data_type ::= XMLTYPE
data_type ::= CHAR '(' sgn_num ')'
data_type ::= FLOAT '(' sgn_num ')'
data_type ::= NAME '(' sgn_num ')'
data_type ::= NCHAR '(' sgn_num ')'
data_type ::= NUMBER '(' sgn_num ')'
data_type ::= NVARCHAR2 '(' sgn_num ')'
data_type ::= RAW '(' sgn_num ')'
data_type ::= TIMESTAMP '(' sgn_num ')'
data_type ::= UROWID '(' sgn_num ')'
data_type ::= VARCHAR2 '(' sgn_num ')'
data_type ::= NAME '(' sgn_num ',' sgn_num ')'
data_type ::= NUMBER '(' sgn_num ',' sgn_num ')'
sgn_num ::= INTNUM
sgn_num ::= '-' INTNUM
//%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
//%%the various things you can name
//%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
column ::= identifier
cursor ::= identifier
parameter ::= PARAMETER
//%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
//%%identifier
//%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
identifier ::= NAME
identifier ::= ADMIN
//%identifier ::= ALL
//%identifier ::= ALTER
//%identifier ::= AND
//%identifier ::= ANY
//%identifier ::= APPROXNUM
//%identifier ::= AS
//%identifier ::= ASC
identifier ::= AUTHENTICATION
identifier ::= AUTHORIZATION
identifier ::= BAG
identifier ::= BEGIN
//%identifier ::= BETWEEN
identifier ::= BFILE
identifier ::= BINARY_DOUBLE
identifier ::= BINARY_FLOAT
identifier ::= BITMAP
identifier ::= BLOB
identifier ::= BODY
//%identifier ::= BY
identifier ::= CALL
identifier ::= CASCADE
//%identifier ::= CASE
//%identifier ::= CHAR
//%identifier ::= CHECK
identifier ::= CLOB
identifier ::= CLOSE
//%identifier ::= CLUSTER
identifier ::= COMMIT
//%identifier ::= CONNECT
identifier ::= COMPARISON
//%identifier ::= CONSTRAINT
identifier ::= CONSTRAINTS
identifier ::= CONTENTS
identifier ::= CONTEXT
identifier ::= CONTINUE
//%identifier ::= CREATE
identifier ::= CROSS
identifier ::= CURRENT
identifier ::= CURSOR
identifier ::= DATABASE
identifier ::= DATAFILES
//%identifier ::= DATE
identifier ::= DBLINK
//%identifier ::= DEFAULT
identifier ::= DEFERRED
identifier ::= DELEGATE
//%identifier ::= DELETE
//%identifier ::= DESC
identifier ::= DIRECTORY
//%identifier ::= DISTINCT
//%identifier ::= DROP
//%identifier ::= ELSE
identifier ::= END
identifier ::= ENTERPRISE
identifier ::= ESCAPE
identifier ::= EXCEPT
identifier ::= EXECUTE
//%identifier ::= EXISTS
identifier ::= EXTERNALLY
identifier ::= FETCH
identifier ::= FILTER_WITH
//%identifier ::= FLOAT
identifier ::= FORCE
identifier ::= FOREIGN
identifier ::= FOUND
//%identifier ::= FROM
identifier ::= FULL
identifier ::= FUNCTION
//%identifier ::= FUNS
identifier ::= GLOBALLY
identifier ::= GOTO
//%identifier ::= GRANT
//%identifier ::= GROUP
identifier ::= HASHMAP
//%identifier ::= HAVING
identifier ::= HIERARCHY
//%identifier ::= HINT
//%identifier ::= IDENTIFIED
identifier ::= IF
identifier ::= IMMEDIATE
//%identifier ::= IN
identifier ::= INCLUDING
//%identifier ::= INDEX
identifier ::= INDICATOR
identifier ::= INNER
//%identifier ::= INSERT
//%identifier ::= INTERSECT
//%identifier ::= INTNUM
//%identifier ::= INTO
identifier ::= INVALIDATION
//%identifier ::= IS
identifier ::= JOIN
identifier ::= JSON
identifier ::= KEEP
identifier ::= KEY
identifier ::= KEYLIST
identifier ::= LEFT
//%identifier ::= LIKE
identifier ::= LINK
identifier ::= LOCAL
identifier ::= LOG
//%identifier ::= LONG
identifier ::= MATERIALIZED
//%identifier ::= MINUS
identifier ::= NATURAL
identifier ::= NCHAR
identifier ::= NCLOB
identifier ::= NO
//%identifier ::= NOCYCLE
identifier ::= NONE
identifier ::= NORM_WITH
//%identifier ::= NOT
//%identifier ::= NULLX
//%identifier ::= NUMBER
identifier ::= NVARCHAR2
//%identifier ::= OF
//%identifier ::= ON
identifier ::= ONLINE
identifier ::= OPEN
//%identifier ::= OPTION
//%identifier ::= OR
//%identifier ::= ORDER
identifier ::= ORDERED_SET
identifier ::= OUTER
identifier ::= PACKAGE
//%identifier ::= PARAMETER
identifier ::= PARTITION
identifier ::= PRESERVE
identifier ::= PRIMARY
//%identifier ::= PRIO
identifier ::= PRIVILEGES
identifier ::= PROCEDURE
identifier ::= PROFILE
//%identifier ::= PUBLIC
identifier ::= PURGE
//%identifier ::= RAW
identifier ::= ROWID
identifier ::= QUOTA
identifier ::= REFERENCES
identifier ::= REQUIRED
identifier ::= RETURN
identifier ::= RETURNING
identifier ::= REUSE
//%identifier ::= REVOKE
identifier ::= RIGHT
identifier ::= ROLE
identifier ::= ROLES
identifier ::= ROLLBACK
identifier ::= SCHEMA
//%identifier ::= SELECT
identifier ::= SEQUENCE
//%identifier ::= SET
//%identifier ::= SOME
identifier ::= SQLERROR
//%identifier ::= START
identifier ::= STORAGE
//%identifier ::= STRING
//%identifier ::= SYNONYM
//%identifier ::= TABLE
//%identifier ::= TABLESPACE
//%identifier ::= TEMPORARY
//%identifier ::= THEN
//%identifier ::= THROUGH
identifier ::= TIMESTAMP
//%identifier ::= TO
//%identifier ::= TRIGGER
//%identifier ::= TRUNCATE
identifier ::= TYPE
//%identifier ::= UNION
//%identifier ::= UNIQUE
identifier ::= UNLIMITED
//%identifier ::= UPDATE
identifier ::= UROWID
//%identifier ::= USER
identifier ::= USERS
identifier ::= USING
identifier ::= VALIDATE
//%identifier ::= VALUES
//%identifier ::= VARCHAR2
//%identifier ::= VIEW
//%identifier ::= WHEN
identifier ::= WHENEVER
//%identifier ::= WHERE
//%identifier ::= WITH
identifier ::= WORK
identifier ::= XMLTYPE
//%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
//%%embedded condition things
//%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
when_action ::= GOTO identifier
when_action ::= CONTINUE
After manually massage
sqlparse.yrl
with some search and replace we can have a nice navigable railroad diagram.Copy and paste the
EBNF
shown bellow on https://www.bottlecaps.de/rr/ui on the tabEdit Grammar
the click on the tabView Diagram
to see/download a navigable railroad diagram.