Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Grammar railroad diagram #186

Open
mingodad opened this issue May 30, 2023 · 0 comments
Open

Grammar railroad diagram #186

mingodad opened this issue May 30, 2023 · 0 comments

Comments

@mingodad
Copy link

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
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant