以下是语法:
SQL92 Grammar
The following SQL grammars are currently available:
SQL A simple subset of the SQL language
SQL92 The full SQL92 grammar, based on ISO standard SQL2 (shown below)
TSQL A Beta version of the TSQL grammar
The grammar definition shown below describes the syntax for the SQL92 language.
// =================================================================
// ProGrammar Grammar Definition File
// -----------------------------------------------------------------
//
// SQL2.GDL - Based on ISO standard SQL2 (also called SQL92)
//
// This example is intended for demonstration purposes only.
//
// Copyright (c) 2001 NorKen Technologies, Inc.
//
// ==================================================================
//
// Abbreviations used in rule's names
//
// author authorization
// char character
// dec declaration
// def defined
// def definition
// diag diagnostics
// dyn dynamic
// embdd embedded
// exec executable
// exp expression
// fct function
// frac fractional
// id identifier
// implt implementation
// lit literal
// num numeric
// op operator
// pos positionned
// ref referential
// rep repertoire
// spec specification
// std standard
// stmt statement
// univ universal
grammar SQL2
{
start ::=
{direct_sql_stmt [";"] };
direct_sql_stmt ::=
direct_sql_data_stmt
| SQL_schema_stmt
| SQL_transaction_stmt
| SQL_connection_stmt
| SQL_session_stmt
| direct_implt_def_stmt
;
direct_sql_data_stmt ::=
delete_stmt_searched
| direct_select_stmt_n_rows
| insert_stmt
| update_stmt_searched
| temporary_table_decl ;
direct_select_stmt_n_rows ::=
query_exp [order_by_clause] ;
SQL_data_stmt ::=
open_stmt
| fetch_stmt
| close_stmt
| select_stmt_single_row
| SQL_data_change_stmt ;
SQL_data_change_stmt ::=
delete_stmt_pos
| delete_stmt_searched
| insert_stmt
| update_stmt_pos
| update_stmt_searched ;
SQL_schema_stmt ::=
SQL_schema_def_stmt
| SQL_schema_manipulation_stmt ;
SQL_schema_def_stmt ::=
schema_def
| table_def
| view_def
| grant_stmt
| domain_def
| char_set_def
| collation_def
| translation_def
| assertion_def ;
SQL_schema_manipulation_stmt ::=
drop_schema_stmt
| alter_table_stmt
| drop_table_stmt
| drop_view_stmt
| revoke_stmt
| alter_domain_stmt
| drop_domain_stmt
| drop_char_set_stmt
| drop_collation_stmt
| drop_translation_stmt
| drop_assertion_stmt ;
SQL_transaction_stmt ::=
set_transaction_stmt
| set_constraints_mode_stmt
| commit_stmt
| rollback_stmt ;
SQL_connection_stmt ::=
connect_stmt
| set_connection_stmt
| disconnect_stmt ;
SQL_session_stmt ::=
set_catalog_stmt
| set_schema_stmt
| set_names_stmt
| set_session_auth_ident_stmt
| set_local_time_zone_stmt ;
sql_dyn_stmt ::=
system_descriptor_stmt
| prepare_stmt
| deallocate_prepared_stmt
| describe_stmt
| execute_stmt
| execute_immediate_stmt
| sql_dyn_data_stmt ;
SQL_diagnostics_stmt ::=
get_diag_stmt ;
action ::=
delete_action
| usage_action
| select_action
| insert_action
| update_action
| references_action
;
delete_action ::=
"delete";
usage_action ::=
"usage" ;
select_action ::=
"select" ["(" privilege_column_list ")"];
insert_action ::=
"insert" ["(" privilege_column_list ")"];
update_action ::=
"update" ["(" privilege_column_list ")"];
references_action ::=
"references" ["(" privilege_column_list ")"] ;
action_list ::=
{action, ","};
add_column_def ::=
"add" ["column"] column_def ;
add_domain_constraint_def ::=
"add" domain_constraint ;
add_table_constraint_def ::=
"add" table_constraint_def ;
allocate_cursor_stmt ::=
"allocate" extended_cursor_name
[insensitive_tag]
[scroll_tag] "cursor"
"for" extended_stmt_name
;
insensitive_tag ::=
"insensitive" ;
scroll_tag ::=
"scroll" ;
allocate_descriptor_stmt ::=
"allocate" "descriptor" descriptor_name
[with_max_occurrences]
;
with_max_occurrences ::=
"with" "max" occurrences ;
alter_column_action ::=
set_column_default_clause
| drop_column_default_clause
;
alter_column_def ::=
"alter" ["column"]
column_name alter_column_action ;
alter_domain_action ::=
set_domain_default_clause
| drop_domain_default_clause
| add_domain_constraint_def
| drop_domain_constraint_def
;
alter_domain_stmt ::=
"alter" "domain"
domain_name alter_domain_action ;
alter_table_action ::=
add_column_def
| alter_column_def
| drop_column_def
| add_table_constraint_def
| drop_table_constraint_def
;
alter_table_stmt ::=
"alter" "table"
table_name alter_table_action
;
argument ::=
target_spec ;
assertion_check ::=
"check"
"(" search_condition ")" ;
assertion_def ::=
"create" "assertion"
constraint_name assertion_check
[constraint_attributes] ;
as_clause ::=
["as"] column_name;
between_predicate ::=
row_value_constructor
[not_tag] "between" row_value_constructor
"and" row_value_constructor ;
not_tag ::=
"not" ;
case_abbreviation ::=
nullif_case_abbreviation
| coalesce_case_abbreviation
;
nullif_case_abbreviation ::=
"nullif" "(" value_exp "," value_exp ")" ;
coalesce_case_abbreviation ::=
"coalesce" "(" { value_exp, "," } ")" ;
case_exp ::=
case_abbreviation
| case_spec ;
case_operand ::=
value_exp ;
case_spec ::=
simple_case
| searched_case ;
cast_operand ::=
value_exp
| null_tag;
null_tag ::=
"null" ;
cast_spec ::=
"cast" "(" cast_operand "as"
cast_target ")" ;
cast_target ::=
domain_name
| data_type ;
char_factor ::=
char_primary [collate_clause] ;
char_length_exp ::=
("char_length" | "character_length")
"(" string_value_exp ")" ;
char_primary ::=
value_exp_primary
| string_value_fct ;
char_substring_fct ::=
"substring" "(" char_value_exp
"from" start_position
[for_string_length] ")" ;
for_string_length ::=
"for" string_length ;
char_translation ::=
"translate" "(" char_value_exp
"using" translation_name ")" ;
char_value_exp ::=
{ char_factor, concatenation_op };
concatenation_op ::=
"||" ;
char_value_fct ::=
char_substring_fct
| fold
| form_conversion
| char_translation
| trim_fct
;
check_constraint_def ::=
"check"
"(" search_condition ")" ;
close_stmt ::=
"close" cursor_name ;
column_constraint ::=
not_null_spec
| unique_spec
| refs_spec
| check_constraint_def ;
not_null_spec ::=
not_tag null_tag ;
column_constraint_def ::=
[constraint_name_def]
column_constraint
[constraint_attributes] ;
column_def ::=
column_name
(data_type | domain_name)
[default_clause]
[{column_constraint_def}]
[collate_clause] ;
column_name_list ::=
{column_name, ","} ;
commit_stmt ::=
"commit" ["work"] ;
comp_op ::=
"="
| "<>"
| "<"
| ">"
| "<="
| ">=" ;
comp_predicate ::=
row_value_constructor comp_op
row_value_constructor ;
condition ::=
sqlerror_condition
| not_found_condition ;
sqlerror_condition ::=
"sqlerror" ;
not_found_condition ::=
"not" "found" ;
condition_action ::=
continue_action
| go_to ;
continue_action ::=
"continue" ;
condition_information ::=
"exception" condition_number
{ condition_information_item, "," } ;
condition_information_item ::=
simple_target_spec "="
condition_info_item_name ;
condition_info_item_name ::=
"condition_number"
| "returned_sqlstate"
| "class_origin"
| "subclass_origin"
| "server_name"
| "connection_name"
| "constraint_catalog"
| "constraint_schema"
| "constraint_name"
| "catalog_name"
| "schema_name"
| "table_name"
| "column_name"
| "cursor_name"
| "message_text"
| "message_length"
| "message_octet_length"
;
condition_number ::=
simple_value_spec ;
connection_name ::=
simple_value_spec ;
connection_object ::=
default_tag
| connection_name ;
default_tag ::=
"default" ;
connection_target ::=
sql_server_name
["as" connection_name]
["user" user_name]
| default_tag ;
connect_stmt ::=
"connect" "to" connection_target ;
constraint_attributes ::=
constraint_check_time
[[not_tag] deferrable_tag]
| [not_tag] deferrable_tag
[constraint_check_time] ;
deferrable_tag ::=
"deferrable" ;
constraint_check_time ::=
"initially"
(deferrable_tag | immediate_tag) ;
immediate_tag ::=
"immediate" ;
constraint_name ::=
qualified_name ;
constraint_name_def ::=
"constraint" constraint_name ;
constraint_name_list ::=
all_tag
| {constraint_name, ","} ;
all_tag ::=
"all" ;
corresponding_column_list ::=
column_name_list ;
corresponding_spec ::=
"corresponding"
[by_corresponding_column_list] ;
by_corresponding_column_list ::=
"by" "(" corresponding_column_list ")" ;
cross_join ::=
"cross" "join" table_ref ;
cursor_spec ::=
query_exp
[order_by_clause]
[updatability_clause] ;
data_type ::=
char_string_type
["character" "set" char_set_spec]
| national_char_string_type
| bit_string_type
| num_type
| datetime_type
| interval_type ;
deallocate_descriptor_stmt ::=
"deallocate" "descriptor"
descriptor_name ;
deallocate_prepared_stmt ::=
"deallocate" "prepare"
sql_stmt_name ;
declare_cursor ::=
"declare" cursor_name
[insensitive_tag]
[scroll_tag] "cursor"
"for" cursor_spec ;
default_clause ::=
"default" default_option ;
default_option ::=
lit
| datetime_value_fct
| user
| current_user
| session_user
| system_user
| default_option_null
;
user ::=
"user" ;
current_user ::=
"current_user" ;
session_user ::=
"session_user" ;
system_user ::=
"system_user" ;
default_option_null ::=
"null" ;
default_spec ::=
"default" ;
delete_rule ::=
"on" "delete" ref_action ;
delete_stmt_pos ::=
"delete" ["from" table_name]
"where" "current" "of"
cursor_name ;
delete_stmt_searched ::=
"delete" "from" table_name
["where" search_condition] ;
derived_column ::=
value_exp [as_clause];
derived_column_list ::=
column_name_list ;
describe_input_stmt ::=
"describe" "input"
sql_stmt_name using_descriptor ;
describe_output_stmt ::=
"describe" [output_tag]
sql_stmt_name using_descriptor ;
output_tag ::=
"output" ;
describe_stmt ::=
describe_input_stmt
| describe_output_stmt ;
descriptor_item_name ::=
"type"
| "length"
| "octet_length"
| "returned_length"
| "returned_octet_length"
| "precision"
| "scale"
| "datetime_interval_code"
| "datetime_interval_precision"
| "nullable"
| "indicator"
| "data"
| "name"
| "unnamed"
| "collation_catalog"
| "collation_schema"
| "collation_name"
| "character_set_catalog"
| "character_set_schema"
| "character_set_name"
;
descriptor_name ::=
[scope_option] simple_value_spec ;
diag_size ::=
"diagnostics" "size"
number_of_conditions ;
disconnect_object ::=
connection_object
| all_tag
| current_tag
;
current_tag ::=
"current" ;
disconnect_stmt ::=
"disconnect" disconnect_object ;
domain_constraint ::=
[constraint_name_def]
check_constraint_def
[constraint_attributes] ;
domain_def ::=
"create" "domain" domain_name
["as"] data_type
[default_clause]
[{domain_constraint}]
[collate_clause] ;
domain_name ::=
qualified_name ;
drop_assertion_stmt ::=
"drop" "assertion"
constraint_name ;
drop_behavior ::=
"cascade"
| "restrict" ;
drop_column_def ::=
"drop" ["column"]
column_name drop_behavior ;
drop_column_default_clause ::=
"drop" "default" ;
drop_domain_constraint_def ::=
"drop" "constraint"
constraint_name ;
drop_domain_default_clause ::=
"drop" "default" ;
drop_domain_stmt ::=
"drop" "domain"
domain_name drop_behavior ;
drop_schema_stmt ::=
"drop" "schema"
qualified_name drop_behavior ;
drop_table_constraint_def ::=
"drop" "constraint"
constraint_name drop_behavior ;
drop_table_stmt ::=
"drop" "table"
table_name drop_behavior ;
drop_view_stmt ::=
"drop" "view"
table_name drop_behavior ;
dyn_close_stmt ::=
"close" dyn_cursor_name ;
dyn_cursor_name ::=
cursor_name
| extended_cursor_name ;
dyn_declare_cursor ::=
"declare" cursor_name
[insensitive_tag]
[scroll_tag] "cursor"
"for" stmt_name ;
dyn_delete_stmt_pos ::=
"delete" "from" table_name
"where" "current" "of"
dyn_cursor_name ;
dyn_fetch_stmt ::=
"fetch" [[fetch_orientation] "from"]
dyn_cursor_name using_clause ;
dyn_open_stmt ::=
"open" dyn_cursor_name
[using_clause] ;
dyn_parameter_spec ::=
"?" ;
dyn_select_stmt ::=
cursor_spec ;
dyn_single_row_select_stmt ::=
query_spec ;
dyn_update_stmt_pos ::=
"update" table_name
"set" {set_clause, ","}
"where" "current" "of"
dyn_cursor_name ;
sql_edition ::=
e1987 | e1989 | e1992 ;
e1987 ::=
"0"
| "edition1987" "(" "0" ")" ;
e1989 ::=
e1989_base e1989_package ;
e1989_base ::=
"1"
| "edition1989" "(" "1" ")" ;
e1989_package ::=
integrity_no
| integrity_yes ;
e1992 ::=
"2"
| "edition1992" "(" "2" ")" ;
else_clause ::=
"else" result ;
escape_char ::=
char_value_exp ;
execute_immediate_stmt ::=
"execute" "immediate"
sql_stmt_variable ;
execute_stmt ::=
"execute" sql_stmt_name
[result_using_clause]
[parameter_using_clause] ;
exists_predicate ::=
"exists" table_subquery ;
explicit_table ::=
"table" table_name ;
extended_cursor_name ::=
[scope_option]
simple_value_spec ;
extended_stmt_name ::=
[scope_option]
simple_value_spec ;
extract_exp ::=
"extract" "(" extract_field
"from" extract_source ")" ;
extract_field ::=
datetime_field
| time_zone_field ;
extract_source ::=
datetime_value_exp
| interval_value_exp ;
factor ::=
[sign] num_primary ;
fetch_orientation ::=
"next"
| "prior"
| "first"
| "last"
| absolute_or_relative simple_value_spec ;
absolute_or_relative ::=
"absolute"
| "relative"
;
fetch_stmt ::=
"fetch" [[fetch_orientation] "from"]
cursor_name "into" fetch_target_list ;
fetch_target_list ::=
{target_spec, ","} ;
fold ::=
upper_or_lower
"(" char_value_exp ")" ;
upper_or_lower ::=
"upper"
| "lower" ;
form_conversion ::=
"convert" "(" char_value_exp
"using" form_conversion_name ")" ;
form_conversion_name ::=
qualified_name ;
from_clause ::=
"from" {table_ref, ","} ;
general_set_fct ::=
set_fct_type
"(" [set_quantifier] value_exp ")" ;
general_value_spec ::=
parameter_spec
| dyn_parameter_spec
| variable_spec
| user
| current_user
| session_user
| system_user
| value_tag ;
value_tag ::=
"value" ;
get_count ::=
simple_target_spec "="
"count" ;
get_descriptor_information ::=
get_count
| get_descriptor_item_information
;
get_descriptor_item_information ::=
"value" item_number
{get_item_information, ","} ;
get_descriptor_stmt ::=
"get" "descriptor"
descriptor_name
get_descriptor_information ;
get_diag_stmt ::=
"get" "diagnostics"
sql_diag_information ;
get_item_information ::=
simple_target_spec "="
descriptor_item_name ">" ;
goto_target ::=
host_label_id
| unsigned_integer
| host_pl1_label_variable ;
go_to ::=
("goto" | "go" "to")
goto_target ;
grantee ::=
public_tag
| authorization_ident ;
public_tag ::=
"public" ;
grant_stmt ::=
"grant" privileges "on" object_name
"to" {grantee, grantee}
[with_grant_option] ;
with_grant_option ::=
"with" "grant" "option" ;
grouping_column_ref ::=
column_ref [collate_clause] ;
grouping_column_ref_list ::=
{grouping_column_ref, ","} ;
group_by_clause ::=
"group" "by"
grouping_column_ref_list ;
having_clause ::=
"having" search_condition ;
high ::=
"2"
| "high" "(" "2" ")" ;
indicator_parameter ::=
[indicator_tag] parameter_name ;
indicator_tag ::=
"indicator" ;
indicator_variable ::=
[indicator_tag] embdd_variable_name ;
insert_columns_and_source ::=
["(" insert_column_list ")"] query_exp
| default_values_tag ;
default_values_tag ::=
"default" "values" ;
insert_column_list ::=
column_name_list ;
insert_stmt ::=
"insert" "into" table_name
insert_columns_and_source ;
integrity_no ::=
"0"
| "integrityno" "(" "0" ")" ;
integrity_yes ::=
"1"
| "integrityyes" "(" "1" ")" ;
intermediate ::=
"1"
| "intermediate" "(" "1" ")" ;
in_predicate ::=
row_value_constructor
[not_tag] "in" in_predicate_value ;
in_predicate_value ::=
table_subquery
| [values_tag] "(" in_value_list ")" ;
values_tag ::=
"values" ;
in_value_list ::=
{value_exp, ","} ;
isolation_level ::=
"isolation" "level"
level_of_isolation ;
item_number ::=
simple_value_spec ;
joined_table ::=
table_ref_simple (cross_join | qualified_join)
| "(" joined_table ")"
;
join_column_list ::=
column_name_list ;
join_condition ::=
"on" search_condition ;
join_spec ::=
join_condition
| named_columns_join ;
join_type ::=
inner_join_type
| outer_join_type ["outer"]
| union_join_type
;
inner_join_type ::=
"inner" ;
union_join_type ::=
"union" ;
length_exp ::=
char_length_exp
| octet_length_exp
| bit_length_exp ;
levels_clause ::=
"cascaded"
| "local" ;
level_of_isolation ::=
"read" "uncommitted"
| "read" "committed"
| "repeatable" "read"
| "serializable" ;
like_predicate ::=
match_value [not_tag] "like" pattern
["escape" escape_char] ;
low ::=
"0"
| "low" "(" "0" ")" ;
match_predicate ::=
row_value_constructor
"match" [unique_tag]
[match_type] table_subquery ;
unique_tag ::=
"unique" ;
match_type ::=
"full"
| "partial" ;
match_value ::=
char_value_exp ;
module_contents ::=
declare_cursor
| dyn_declare_cursor
| procedure ;
named_columns_join ::=
"using" "(" join_column_list ")" ;
query_exp ::=
{ query_term, (union_tag | except_tag)
[all_tag] [ corresponding_spec ] };
union_tag ::=
"union" ;
except_tag ::=
"except" ;
query_term ::=
{ query_primary, "intersect"
[all_tag] [ corresponding_spec ] };
query_primary ::=
simple_table
| joined_table
| "(" query_exp ")" ;
null_predicate ::=
row_value_constructor
"is" [not_tag] null_tag ;
number_of_conditions ::=
simple_value_spec ;
num_primary ::=
value_exp_primary
| num_value_fct ;
num_value_fct ::=
position_exp
| extract_exp
| length_exp ;
num_value_exp ::=
{term, term_op} ;
term_op ::=
"+" | "-" ;
object_column ::=
column_name ;
object_name ::=
["table"] table_name
| "domain" domain_name
| "collation" collation_name
| "character" "set" char_set_name
| "translation" translation_name ;
occurrences ::=
simple_value_spec ;
octet_length_exp ::=
"octet_length"
"(" string_value_exp ")" ;
open_stmt ::=
"open" cursor_name ;
ordering_spec ::=
"asc"
| "desc" ;
order_by_clause ::=
"order" "by" sort_spec_list ;
outer_join_type ::=
"left"
| "right"
| "full" ;
overlaps_predicate ::=
row_value_constructor
"overlaps" row_value_constructor ;
pad_attribute ::=
no_tag "pad"
| "pad" space_tag ;
no_tag ::= "no" ;
space_tag ::= "space";
parameter_decl ::=
parameter_name data_type
| status_parameter ;
parameter_decl_list ::=
"(" { parameter_decl, "," } ")"
| [{ parameter_decl }] ;
parameter_spec ::=
parameter_name [indicator_parameter] ;
parameter_using_clause ::=
using_clause ;
pattern ::=
char_value_exp ;
position_exp ::=
"position" "(" char_value_exp
"in" char_value_exp ")" ;
predicate ::=
comp_predicate
| between_predicate
| in_predicate
| like_predicate
| null_predicate
| quantified_comp_predicate
| exists_predicate
| unique_predicate
| match_predicate
| overlaps_predicate ;
prepare_stmt ::=
"prepare" sql_stmt_name
"from" sql_stmt_variable ;
prep_dyn_delete_stmt_pos ::=
"delete" [ "from" table_name ]
"where" "current" "of" cursor_name ;
prep_dyn_update_stmt_pos ::=
"update" [ table_name ]
"set" set_clause_list
"where" "current" "of" cursor_name ;
prep_sql_data_stmt ::=
delete_stmt_searched
| dyn_single_row_select_stmt
| insert_stmt
| dyn_select_stmt
| update_stmt_searched
| prep_dyn_delete_stmt_pos
| prep_dyn_update_stmt_pos ;
prep_stmt ::=
prep_sql_data_stmt
| SQL_schema_stmt
| SQL_transaction_stmt
| SQL_session_stmt
| prep_implt_def_stmt ;
privileges ::=
all_privileges
| action_list ;
all_privileges ::=
"all" "privileges" ;
privilege_column_list ::=
column_name_list ;
procedure ::=
"procedure" procedure_name
parameter_decl_list ";"
sql_procedure_stmt ";" ;
qualified_join ::=
[natural_tag] [join_type] "join"
table_ref [join_spec] ;
natural_tag ::=
"natural" ;
quantified_comp_predicate ::=
row_value_constructor comp_op
quantifier table_subquery ;
quantifier ::=
"all"
| "some"
| "any" ;
query_spec ::=
"select" [set_quantifier]
select_list table_exp ;
refd_table_and_columns ::=
table_name ["(" ref_column_list ")"] ;
referencing_columns ::=
ref_column_list ;
refs_spec ::=
"references" [pendant_tag]
refd_table_and_columns
[match_tag match_type]
[ref_triggered_action] ;
match_tag ::=
"match" ;
pendant_tag ::=
"PENDANT" ;
ref_action ::=
"cascade"
| "set" "null"
| "set" "default"
| "no" "action" ;
ref_column_list ::=
column_name_list ;
ref_constraint_def ::=
"foreign" "key"
"(" referencing_columns ")"
refs_spec ;
ref_triggered_action ::=
update_rule [delete_rule]
| delete_rule [update_rule] ;
result ::=
result_exp
| null_tag ;
result_exp ::=
value_exp ;
result_using_clause ::=
using_clause ;
revoke_stmt ::=
"revoke" [grant_option_for]
privileges
"on" object_name
"from" { grantee, "," }
drop_behavior ;
grant_option_for ::=
"grant" "option" "for" ;
rollback_stmt ::=
"rollback" ["work"];
row_subquery ::=
subquery ;
row_value_constructor ::=
row_value_constructor_elem
| "(" row_value_const_list ")"
| row_subquery ;
row_value_constructor_elem ::=
value_exp
| null_tag
| default_spec ;
row_value_const_list ::=
{ row_value_constructor_elem, "," } ;
scalar_subquery ::=
subquery ;
schema_authorization_ident ::=
authorization_ident ;
schema_def ::=
"create" "schema" schema_name_clause
[schema_char_set_spec]
[{ schema_element }] ;
schema_element ::=
domain_def
| table_def
| view_def
| grant_stmt
| assertion_def
| char_set_def
| collation_def
| translation_def ;
schema_name_clause ::=
qualified_name
["authorization" schema_authorization_ident]
| "authorization" schema_authorization_ident ;
scope_option ::=
"global"
| "local" ;
searched_case ::=
"case"
{ searched_when_clause }
[else_clause]
"end" ;
searched_when_clause ::=
"when" search_condition "then" result ;
search_condition ::=
boolean_value_exp ;
boolean_value_exp ::=
{ boolean_term, boolean_term_op } ;
boolean_term_op ::=
"or" ;
boolean_term ::=
{ boolean_factor, boolean_factor_op } ;
boolean_factor_op ::=
"and" ;
boolean_factor ::=
[not_tag] boolean_test ;
boolean_test ::=
boolean_primary
["is" [not_tag] truth_value] ;
boolean_primary ::=
predicate
| "(" search_condition ")" ;
truth_value ::=
"true"
| "false"
| "unknown" ;
select_list ::=
asterisk_tag
| { select_sublist, "," } ;
asterisk_tag ::=
"*" ;
select_stmt_single_row ::=
"select" [set_quantifier] select_list
"into" select_target_list
table_exp ;
select_sublist ::=
qualified_name "." asterisk_tag
| derived_column
;
select_target_list ::=
{target_spec, ","} ;
set_catalog_stmt ::=
"set" "catalog" value_spec ;
set_clause ::=
object_column "=" update_source ;
set_clause_list ::=
{set_clause, ","} ;
set_column_default_clause ::=
"set" default_clause ;
set_connection_stmt ::=
"set" "connection"
connection_object ;
set_constraints_mode_stmt ::=
"set" "constraints"
constraint_name_list
(deferred_tag | immediate_tag) ;
deferred_tag ::=
"deferred" ;
set_count ::=
"count" "=" simple_value_spec ;
set_descriptor_information ::=
set_count
| set_descriptor_item_information
;
set_descriptor_item_information ::=
"value" item_number
{set_item_information, ","} ;
set_descriptor_stmt ::=
"set" "descriptor"
descriptor_name
set_descriptor_information ;
set_domain_default_clause ::=
"set" default_clause ;
set_fct_spec ::=
count_all_fct
| general_set_fct ;
count_all_fct ::=
"count" "(" "*" ")" ;
set_fct_type ::=
"avg"
| "max"
| "min"
| "sum"
| "count" ;
set_item_information ::=
descriptor_item_name "="
simple_value_spec ;
set_local_time_zone_stmt ::=
"set" "time" "zone"
set_time_zone_value ;
set_names_stmt ::=
"set" "names" value_spec ;
set_quantifier ::=
"distinct" | "all" ;
set_schema_stmt ::=
"set" "schema" value_spec ;
set_session_auth_ident_stmt ::=
"set" "session" "authorization"
value_spec ;
set_transaction_stmt ::=
"set" "transaction"
{ transaction_mode, "," } ;
sign ::=
"+" | "-" ;
signed_integer ::=
[sign] unsigned_integer ;
simple_case ::=
"case" case_operand
{ simple_when_clause }
[ else_clause ]
"end" ;
simple_table ::=
query_spec
| table_value_constructor
| explicit_table ;
simple_target_spec ::=
parameter_name
| embdd_variable_name ;
simple_value_spec ::=
parameter_name
| embdd_variable_name
| lit ;
simple_when_clause ::=
"when" when_operand "then" result ;
sort_key ::=
column_ref
| unsigned_integer ;
sort_spec ::=
sort_key
[collate_clause]
[ordering_spec] ;
sort_spec_list ::=
{ sort_spec, "," } ;
sql_conformance ::=
low
| intermediate
| high ;
SQL_diag_information ::=
stmt_information
| condition_information ;
sql_dyn_data_stmt ::=
allocate_cursor_stmt
| dyn_open_stmt
| dyn_fetch_stmt
| dyn_close_stmt
| dyn_delete_stmt_pos
| dyn_update_stmt_pos ;
sql_language_id ::=
sql_language_id_start
[{ "_" | sql_language_id_part }] ;
sql_language_id_part ::=
simple_latin_letter
| digit ;
sql_language_id_start ::=
simple_latin_letter ;
sql_object_id ::=
sql_provenance sql_variant ;
sql_prefix ::=
"exec" "sql"
| "&" "sql" "(" ;
sql_procedure_stmt ::=
SQL_schema_stmt
| SQL_data_stmt
| SQL_transaction_stmt
| SQL_connection_stmt
| SQL_session_stmt
| sql_dyn_stmt
| SQL_diagnostics_stmt ;
sql_provenance ::=
arc1 arc2 arc3 ;
arc1 ::=
"1" | "iso" [ "(" "1" ")" ] ;
arc2 ::=
"0" | ("std" | "standard") [ "(" "0" ")" ] ;
arc3 ::=
"9075" ;
sql_server_name ::=
simple_value_spec ;
sql_stmt_name ::=
stmt_name
| extended_stmt_name ;
sql_stmt_variable ::=
simple_value_spec ;
sql_terminator ::=
"end-exec"
| ";"
| ")" ;
sql_variant ::=
sql_edition sql_conformance ;
start_position ::=
num_value_exp ;
status_parameter ::=
"sqlcode"
| "sqlstate" ;
stmt_information ::=
{ stmt_information_item, "," } ;
stmt_information_item ::=
simple_target_spec "=" stmt_info_item_name ;
stmt_info_item_name ::=
"number"
| "more"
| "command_function"
| "dynamic_function"
| "row_count" ;
stmt_or_decl ::=
declare_cursor
| dyn_declare_cursor
| temporary_table_decl
| embdd_exception_decl
| sql_procedure_stmt ;
string_length ::=
num_value_exp ;
string_value_fct ::=
char_value_fct
| bit_value_fct ;
subquery ::=
"(" query_exp ")" ;
system_descriptor_stmt ::=
allocate_descriptor_stmt
| deallocate_descriptor_stmt
| set_descriptor_stmt
| get_descriptor_stmt ;
table_constraint ::=
unique_constraint_def
| ref_constraint_def
| check_constraint_def ;
table_constraint_def ::=
[constraint_name_def]
table_constraint [constraint_attributes] ;
table_def ::=
"create" [table_scope]
table_type table_name
table_element_list
[on_commit_clause] ;
on_commit_clause ::=
"on" "commit" on_comment_action "rows" ;
on_comment_action ::=
"delete"
| "preserve" ;
table_scope ::=
global_or_local "TEMPORARY" ;
global_or_local ::=
"GLOBAL"
| "LOCAL"
;
table_type ::=
"TABLE";
table_element ::=
table_constraint_def
| column_def
;
table_element_list ::=
"(" { table_element, "," } ")" ;
table_exp ::=
from_clause
[where_clause]
[group_by_clause]
[having_clause] ;
table_ref ::=
table_ref_simple
[{cross_join | qualified_join}]
;
table_ref_simple ::=
(table_name | derived_table)
[["as"] correlation_name
["(" derived_column_list ")"]]
;
table_subquery ::=
subquery ;
table_value_constructor ::=
"values" table_value_const_list ;
table_value_const_list ::=
{ row_value_constructor, "," } ;
target_spec ::=
parameter_spec
| variable_spec ;
temporary_table_decl ::=
"declare" "local" "temporary" "table"
qualified_name
table_element_list
[on_comment_action] ;
term ::=
{factor, "*"|"/"} ;
transaction_access_mode ::=
"read" "only"
| "read" "write" ;
transaction_mode ::=
isolation_level
| transaction_access_mode
| diag_size ;
trim_char ::=
char_value_exp ;
trim_fct ::=
"trim" "(" trim_operands ")" ;
trim_operands ::=
[[trim_spec] [trim_char] "from"]
trim_source ;
trim_source ::=
char_value_exp ;
trim_spec ::=
"leading"
| "trailing"
| "both" ;
unique_column_list ::=
column_name_list ;
unique_constraint_def ::=
unique_spec ["(" unique_column_list ")"]
| unique_value
;
unique_value ::=
"UNIQUE" "(" "VALUE" ")" ;
unique_predicate ::=
"unique" table_subquery ;
unique_spec ::=
"unique"
| "primary" "key" ;
unsigned_value_spec ::=
unsigned_lit
| general_value_spec ;
updatability_clause ::=
"for" (read_only_tag | update_of_list) ;
update_of_list ::=
"update" ["of" column_name_list] ;
read_only_tag ::=
"read" "only" ;
update_rule ::=
"on" "update" ref_action ;
update_source ::=
value_exp
| null_tag
| default_tag ;
update_stmt_pos ::=
"update" table_name
"set" set_clause_list
"where" "current" "of" cursor_name ;
update_stmt_searched ::=
"update" table_name
"set" set_clause_list
["where" search_condition] ;
user_name ::=
simple_value_spec ;
using_arguments ::=
(using_tag | into_tag)
{ argument, "," } ;
using_tag ::=
"using" ;
into_tag ::=
"into" ;
using_clause ::=
using_arguments
| using_descriptor ;
using_descriptor ::=
(using_tag | into_tag)
"sql" "descriptor" descriptor_name ;
value_exp ::=
num_value_exp
| string_value_exp
| datetime_value_exp
| interval_value_exp ;
value_exp_primary ::=
unsigned_value_spec
| set_fct_spec
| column_ref
| scalar_subquery
| case_exp
| "(" in_value_list ")" // was value_exp
| cast_spec ;
value_spec ::=
lit
| general_value_spec ;
variable_spec ::=
embdd_variable_name [indicator_variable] ;
view_column_list ::=
column_name_list ;
view_def ::=
"create" "view" table_name
["(" view_column_list ")"]
"as" query_exp
[with_check_option] ;
with_check_option ::=
"with" [levels_clause] "check" "option" ;
when_operand ::=
value_exp ;
where_clause ::=
"where" search_condition ;
// ---------------------------------------------------
// char set
// ---------------------------------------------------
char_set_def ::=
"create" "character" "set" char_set_name
["as"]
char_set_source
[collate_clause | limited_collation_def] ;
char_set_name ::=
[qualified_name "."]
sql_language_id ;
char_set_source ::=
"get" existing_char_set_name ;
char_set_spec ::=
std_char_rep_name
| implt_def_char_rep_name
| user_def_char_rep_name
| std_univ_char_form_name
| implt_def_univ_char_name
;
drop_char_set_stmt ::=
"drop" "character" "set"
char_set_name ;
existing_char_set_name ::=
std_char_rep_name
| implt_def_char_rep_name
| schema_char_set_name ;
implt_def_char_rep_name ::=
char_set_name ;
implt_def_univ_char_name ::=
char_set_name ;
schema_char_set_name ::=
char_set_name ;
schema_char_set_spec ::=
"default" "character"
"set" char_set_spec ;
source_char_set_spec ::=
char_set_spec ;
std_char_rep_name ::=
char_set_name ;
std_univ_char_form_name ::=
char_set_name ;
target_char_set_spec ::=
char_set_spec ;
user_def_char_rep_name ::=
char_set_name ;
// ---------------------------------------------------
// collation
// ---------------------------------------------------
collate_clause ::=
"collate" collation_name ;
collating_sequence_def ::=
external_collation
| schema_collation_name
| desc_collation_name
| default_tag ;
desc_collation_name ::=
"desc" "(" collation_name ")" ;
collation_def ::=
"create" "collation" collation_name
"for" char_set_spec
"from" collation_source
[pad_attribute]
;
collation_name ::=
qualified_name ;
collation_source ::=
collating_sequence_def
| translation_collation ;
drop_collation_stmt ::=
"drop" "collation" collation_name ;
external_collation ::=
"external"
"(" "'" external_collation_name "'" ")" ;
external_collation_name ::=
std_collation_name
| implt_def_collation_name ;
implt_def_collation_name ::=
collation_name ;
limited_collation_def ::=
"collation" "from" collation_source ;
schema_collation_name ::=
collation_name ;
std_collation_name ::=
collation_name ;
// translation
translation_collation ::=
"translation" translation_name
["then" "collation" collation_name] ;
translation_def ::=
"create" "translation" translation_name
"for" source_char_set_spec
"to" target_char_set_spec
"from" translation_source ;
translation_name ::=
qualified_name ;
translation_source ::=
translation_spec ;
translation_spec ::=
external_translation
| identity_tag
| schema_translation_name ;
identity_tag ::=
"identity" ;
drop_translation_stmt ::=
"drop" "translation" translation_name ;
external_translation ::=
"external"
"(" "'" external_translation_name "'" ")" ;
external_translation_name ::=
std_translation_name
| implt_def_translation_name ;
implt_def_translation_name ::=
translation_name ;
schema_translation_name ::=
translation_name ;
std_translation_name ::=
translation_name ;
datetime_primary ::=
value_exp_primary
| datetime_value_fct ;
datetime_factor ::=
datetime_primary [time_zone] ;
datetime_term ::=
datetime_factor ;
datetime_value_exp ::=
(datetime_term |
interval_value_exp "+" datetime_term)
[{term_op interval_term}]
;
interval_primary ::=
value_exp_primary [interval_qualifier] ;
interval_factor ::=
[sign] interval_primary ;
interval_term ::=
[term asterisk_tag]
interval_factor
[{factor_op factor}]
;
factor_op ::=
"*" | "/" ;
interval_frac_seconds_prec ::=
unsigned_integer ;
interval_leading_fieldprec ::=
unsigned_integer ;
interval_qualifier ::=
start_field "to" end_field
| single_datetime_field ;
interval_type ::=
"interval" interval_qualifier ;
interval_value_exp ::=
(interval_term
| "(" datetime_value_exp "-"
datetime_term ")" interval_qualifier)
[{term_op interval_term }]
;
end_field ::=
non_second_datetime_field
| second_tag
["(" interval_frac_seconds_prec ")"] ;
second_tag ::=
"second" ;
start_field ::=
non_second_datetime_field
["(" interval_leading_fieldprec ")"] ;
single_datetime_field ::=
non_second_datetime_field
["(" interval_leading_fieldprec ")"]
| second_tag
[ "(" interval_leading_fieldprec
["," interval_frac_seconds_prec ] ")"] ;
set_time_zone_value ::=
interval_value_exp
| local_tag ;
local_tag ::=
"local" ;
time_string ::=
"'" time_value [time_zone_interval] "'" ;
time_value ::=
hours_value ":"
minutes_value ":"
seconds_value ;
time_zone ::=
"at" time_zone_specifier ;
time_zone_field ::=
"timezone_hour"
| "timezone_minute" ;
time_zone_specifier ::=
"local"
| "time" "zone" interval_value_exp ;
// ======================================================
//
// DATA TYPES
//
// ======================================================
unsigned_integer
::= numeric;
precision
::= unsigned_integer ;
data_length
::= unsigned_integer ;
scale
::= unsigned_integer ;
approximate_num_type ::=
"float" ["(" precision ")"]
| "real"
| "double" "precision"
;
bit_string_type ::=
"bit" [[varying_tag] "(" data_length ")"] ;
varying_tag ::=
"varying" ;
char_string_type ::=
("character" | "char")
[[varying_tag] "(" data_length ")"]
| "varchar" "(" data_length ")" ;
exact_num_type ::=
( "numeric"
| "decimal"
| "dec" ) ["(" precision [ "," scale ] ")"]
| "integer"
| "int"
| "smallint"
;
national_char_string_type ::=
("national" "character"
| "national" "char" | "nchar" )
[[varying_tag] "(" data_length ")"] ;
num_type ::=
exact_num_type
| approximate_num_type ;
// ---------------------------------------------------
// date and time
// ---------------------------------------------------
datetime_type ::=
date_type
| time_type
| timestamp_type
;
date_type
::= "date" ;
time_type ::=
"time" ["(" time_precision ")"]
[with_time_zone] ;
timestamp_type ::=
"timestamp" ["(" timestamp_precision ")"]
[with_time_zone] ;
with_time_zone ::=
"with" "time" "zone" ;
timestamp_precision ::=
time_frac_seconds_prec ;
time_frac_seconds_prec ::=
unsigned_integer ;
time_precision ::=
time_frac_seconds_prec ;
currenttimestamp_value_fct ::=
"current_timestamp"
["(" timestamp_precision ")"];
current_date_value_fct ::=
"current_date" ;
current_time_value_fct ::=
"current_time"
["(" time_precision ")"] ;
datetime_field ::=
non_second_datetime_field
| second_tag ;
datetime_value ::=
unsigned_integer ;
datetime_value_fct ::=
current_date_value_fct
| current_time_value_fct
| currenttimestamp_value_fct ;
date_string ::=
"'" date_value "'" ;
date_value ::=
years_value "-" months_value
"-" days_value ;
days_value ::=
datetime_value ;
hours_value ::=
datetime_value ;
// intervals
minutes_value ::=
datetime_value ;
months_value ::=
datetime_value ;
non_second_datetime_field ::=
"year"
| "month"
| "day"
| "hour"
| "minute" ;
years_value ::=
datetime_value ;
seconds_integer_value ::=
unsigned_integer ;
seconds_fraction ::=
unsigned_integer ;
seconds_value ::=
seconds_integer_value
["." [seconds_fraction]] ;
// ---------------------------------------------------
// bits
// ---------------------------------------------------
bit_length_exp ::=
"bit_length" "(" string_value_exp ")" ;
bit_primary ::=
value_exp_primary
| string_value_fct ;
bit_substring_fct ::=
"substring" "(" bit_value_exp
"from" start_position
["for" string_length] ")" ;
bit_value_exp ::=
{bit_factor, bit_concat_op};
bit_concat_op ::=
"||";
bit_factor ::=
bit_primary ;
bit_value_fct ::=
bit_substring_fct ;
host_label_id
::= temp_syntax_rule ;
host_pl1_label_variable
::= temp_syntax_rule;
direct_implt_def_stmt
::= temp_syntax_rule;
prep_implt_def_stmt
::= temp_syntax_rule;
string_value_exp
::=
char_value_exp
| bit_value_exp ;
// ===================================================
//
// TOKENIZER
//
// ===================================================
space_symbol ::=
{ ("/32" | "/r" |"/n"|"/t")
| "--" *("/n")
| "/*" *("*/") "*/" ,0 }
;
sql_special_char ::=
" " | "/t" | "/r" | "/"" | "%" | "&"
| "'" | "(" | ")" | "*" | "+" | ","
| "-" | "." | "/" | ":" | ";" | "<"
| "=" | ">" | "?" | "_" | "|"
;
simple_latin_letter ::=
'[a-zA-Z]';
digit ::=
'[0-9]' ;
// literals
unsigned_lit ::=
unsigned_num_lit
| general_lit ;
unsigned_num_lit ::=
( unsigned_integer
[ "." [ unsigned_integer ] ]
| "." unsigned_integer)
["e" exponent]
;
exponent ::=
signed_integer ;
general_lit ::=
char_string_lit
| national_char_string_lit
| bit_string_lit
| hex_string_lit
| datetime_lit
| interval_lit ;
char_string_lit ::=
["_" char_set_spec]
{s_quotedstring} ;
national_char_string_lit ::=
"n" {s_quotedstring} ;
bit_string_lit ::=
"b" {"'" '[01]*' "'"} ;
hex_string_lit ::=
"x" {"'" '[a-fA-F0-9]+' "'"} ;
datetime_lit ::=
date_lit
| time_lit
| timestamp_lit ;
date_lit ::=
"date" date_string ;
interval_lit ::=
"interval" [sign]
interval_string interval_qualifier ;
s_quotedstring ::=
'/'[^']*/'';
lit ::=
signed_num_lit
| general_lit ;
signed_num_lit ::=
[sign] unsigned_num_lit ;
timestamp_lit ::=
"timestamp" timestamp_string ;
time_lit ::=
"time" time_string ;
id ::=
["_" char_set_spec] actual_id ;
actual_id ::=
identifier
| delimited_id ;
identifier ::=
'[a-zA-Z_][a-zA-Z0-9_#]*'
(? #VALUE !::= reserved_word; );
delimited_id ::=
"/"" [{'[^"]' | "/"/""}] "/"" ;
// ====================================================
temp_syntax_rule ::= *(" ");
authorization_ident ::= id ;
time_zone_interval ::=
sign hours_value ":" minutes_value ;
timestamp_string ::=
"'" date_value " " time_value
[ time_zone_interval ] "'" ;
interval_string ::=
"'" ( year_month_literal | day_time_literal ) "'" ;
year_month_literal ::=
years_value
| [ years_value "-" ] months_value ;
day_time_literal ::=
day_time_interval
| time_interval ;
day_time_interval ::=
days_value
[ " " hours_value [ ":" minutes_value
[ ":" seconds_value ] ] ] ;
time_interval ::=
hours_value
[ ":" minutes_value [ ":" seconds_value ] ]
| minutes_value [ ":" seconds_value ]
| seconds_value ;
derived_table ::=
table_subquery ;
// "virtual" symbols for embedded language support
embdd_variable_name ::=
":" host_id ;
host_id ::= identifier; // temp
embdd_exception_decl ::=
"whenever" condition condition_action ;
sql_terminal_char ::=
sql_language_char
| sql_embdd_language_char ;
sql_language_char ::=
simple_latin_letter
| digit
| sql_special_char ;
sql_embdd_language_char ::=
"[" | "]" ;
// ===================================================
column_name ::=
id ;
correlation_name ::=
id ;
cursor_name ::=
id ;
procedure_name ::=
id ;
parameter_name ::=
":" id ;
stmt_name ::=
id ;
column_ref ::=
qualified_name ;
table_name ::=
qualified_name ;
qualified_name ::=
{id, "."} ;
reserved_word ::=
"ABSOLUTE" | "ACTION" | "ADD" | "ALL" | "ALLOCATE"
| "ALTER" | "AND" | "ANY" | "ARE" | "AS" | "ASC"
| "ASSERTION" | "AT" | "AUTHORIZATION" | "AVG"
| "BEGIN" | "BETWEEN" | "BIT" | "BIT_LENGTH" | "BOTH"
| "BY" | "CASCADE" | "CASCADED" | "CASE" | "CAST"
| "CATALOG" | "CHAR" | "CHARACTER" | "CHAR_LENGTH"
| "CHARACTER_LENGTH" | "CHECK" | "CLOSE" | "COALESCE"
| "COLLATE" | "COLLATION" | "COLUMN" | "COMMIT"
| "CONNECT" | "CONNECTION" | "CONSTRAINT"
| "CONSTRAINTS" | "CONTINUE" | "CONVERT"
| "CORRESPONDING" | "COUNT" | "CREATE" | "CROSS"
| "CURRENT" | "CURRENT_DATE" | "CURRENT_TIME"
| "CURRENT_TIMESTAMP" | "CURRENT_USER" | "CURSOR"
| "DATE" | "DAY" | "DEALLOCATE" | "DEC" | "DECIMAL"
| "DECLARE" | "DEFAULT" | "DEFERRABLE" | "DEFERRED"
| "DELETE" | "DESC" | "DESCRIBE" | "DESCRIPTOR"
| "DIAGNOSTICS" | "DISCONNECT" | "DISTINCT" | "DOMAIN"
| "DOUBLE" | "DROP" | "ELSE" | "END" | "END-EXEC"
| "ESCAPE" | "EXCEPT" | "EXCEPTION" | "EXEC" | "EXECUTE"
| "EXISTS" | "EXTERNAL" | "EXTRACT" | "FALSE" | "FETCH"
| "FIRST" | "FLOAT" | "FOR" | "FOREIGN" | "FOUND"
| "FROM" | "FULL" | "GET" | "GLOBAL" | "GO" | "GOTO"
| "GRANT" | "GROUP" | "HAVING" | "HOUR" | "IDENTITY"
| "IMMEDIATE" | "IN" | "INDICATOR" | "INITIALLY"
| "INNER" | "INPUT" | "INSENSITIVE" | "INSERT" | "INT"
| "INTEGER" | "INTERSECT" | "INTERVAL" | "INTO" | "IS"
| "ISOLATION" | "JOIN" | "KEY" | "LANGUAGE" | "LAST"
| "LEADING" | "LEFT" | "LEVEL" | "LIKE" | "LOCAL"
| "LOWER" | "MATCH" | "MAX" | "MIN" | "MINUTE"
| "MODULE" | "MONTH" | "NAMES" | "NATIONAL" | "NATURAL"
| "NCHAR" | "NEXT" | "NO" | "NOT" | "NULL" | "NULLIF"
| "NUMERIC" | "OCTET_LENGTH" | "OF" | "ON" | "ONLY"
| "OPEN" | "OPTION" | "OR" | "ORDER" | "OUTER"
| "OUTPUT" | "OVERLAPS" | "PAD" | "PARTIAL"
| "POSITION" | "PRECISION" | "PREPARE" | "PRESERVE"
| "PRIMARY" | "PRIOR" | "PRIVILEGES" | "PROCEDURE"
| "PUBLIC" | "READ" | "REAL" | "REFERENCES"
| "RELATIVE" | "RESTRICT" | "REVOKE" | "RIGHT"
| "ROLLBACK" | "ROWS" | "SCHEMA" | "SCROLL"
| "SECOND" | "SECTION" | "SELECT" | "SESSION"
| "SESSION_USER" | "SET" | "SIZE" | "SMALLINT" | "SOME"
| "SPACE" | "SQL" | "SQLCODE" | "SQLERROR" | "SQLSTATE"
| "SUBSTRING" | "SUM" | "SYSTEM_USER" | "TABLE"
| "TEMPORARY" | "THEN" | "TIME" | "TIMESTAMP"
| "TIMEZONE_HOUR" | "TIMEZONE_MINUTE" | "TO"
| "TRAILING" | "TRANSACTION" | "TRANSLATE"
| "TRANSLATION" | "TRIM" | "TRUE" | "UNION" | "UNIQUE"
| "UNKNOWN" | "UPDATE" | "UPPER" | "USAGE" | "USER"
| "USING" | "VALUE" | "VALUES" | "VARCHAR" | "VARYING"
| "VIEW" | "WHEN" | "WHENEVER" | "WHERE" | "WITH"
| "WORK" | "WRITE" | "YEAR" | "ZONE"
;
}; // grammar SQL2