Start | ::= | ( ExplainPlan )? ( ( DML | DDL | DOL ) ( <SEMICOLON> )? )+ |
ExplainPlan | ::= | <EXPLAIN> <PLAN> ( <SET> tableIdentifier <EQUAL> Literal )? ( <INTO> ( tableIDDot )? tableIdentifier )? <FOR> |
DML | ::= | ( SelectBase | UpdateStatement | DeleteStatement | InsertStatement ) |
DDL | ::= | ( Alter | Create | Drop | Truncate | Grant | Revoke ) |
DOL | ::= | ( Analyze | Comment ) |
Analyze | ::= | <ANALYZE> ( <TABLE> | <INDEX> | <CLUSTER> ) ( tableIDDot )? tableIdentifier ( ( <COMPUTE> <STATISTICS> ) | ( <ESTIMATE> <STATISTICS> ( <SAMPLE> <INTEGER_LITERAL> ( <ROWS> | <PERCENT> ) )? ) ) |
Comment | ::= | <COMMENT> <ON> ( ( <TABLE> ( tableIDDot )? tableIdentifier ) | ( <COLUMN> SchemaTableColumn ) ) <IS> <CHARACTER_LITERAL> |
Create | ::= | <CREATE> ( <OR> <REPLACE> )? ( CreateTable | CreateUser | CreateTrigger | CreateProcedure | CreateFunction ) |
Drop | ::= | <DROP> ( ( <TABLE> ( IDDot )? Identifier ( ( <CASCADE> ( <CONSTRAINTS> )? ) | <RESTRICT> ) ) | ( <INDEX> ( IDDot )? Identifier ) ) |
Truncate | ::= | <TRUNCATE> <TABLE> ( IDDot )? tableIdentifier |
Grant | ::= | <GRANT> ( ( <ADMIN> | <DBA_DDL> | <RESOURCE> ) | ( ( <INSERT> | <DELETE> | <UPDATE> | <SELECT> | <REFERENCES> ) <ON> Identifier ) ) <TO> Identifier ( <COMMA> Identifier )* |
Revoke | ::= | <REVOKE> ( ( <ADMIN> | <DBA_DDL> | <RESOURCE> ) | ( ( <INSERT> | <DELETE> | <UPDATE> | <SELECT> | <REFERENCES> ) <ON> Identifier ) ) <FROM> Identifier ( <COMMA> Identifier )* |
CreateTrigger | ::= | <TRIGGER> ( IDDot )? Identifier ( <BEFORE> | <AFTER> | ( <INSTED> <OF> ) ) Dml_eventClause ( <WHEN> <OPENPAREN> Condition <CLOSEPAREN> )? Sub_program_body |
Dml_eventClause | ::= | Dml_eventClauseUnit1 ( <OR> Dml_eventClauseUnit1 )* <ON> ( IDDot )? Identifier ( <FOR> <EACH> <ROW> )? |
Dml_eventClauseUnit1 | ::= | ( <DELETE> | <INSERT> | ( <UPDATE> ( <OF> Identifier ( <COMMA> Identifier )* )? ) ) |
CreateFunction | ::= | <FUNCTION> ( IDDot )? tableIdentifier RelationalListWithIO <RETURN> <COLUMN_TYPE> ( <IS> | <AS> ) Sub_program_body <RETURN> Expr <SEMICOLON> <END> <SEMICOLON> |
CreateProcedure | ::= | <PROCEDURE> ( IDDot )? tableIdentifier RelationalListWithIO ( <IS> | <AS> ) Sub_program_body <END> <SEMICOLON> |
Sub_program_body | ::= | ( AssignmentStatements )? <BEGIN> ( ( PLSQLStatement | LoopStatement ) )+ |
PLSQLStatement | ::= | ( DML | DDL | DOL | AssignmentExpr ) <SEMICOLON> |
AssignmentExpr | ::= | ( Identifier <ASSIGN> )? Expr |
LoopStatement | ::= | <FOR> Identifier <IN> NumberLiteral ".." NumberLiteral <LOOP> ( PLSQLStatement )+ <END> <LOOP> |
AssignmentStatements | ::= | ( <DECLARE> )? ( AssignmentStatementSub )+ |
AssignmentStatementSub | ::= | SchemaTableColumn ( FullType )? ( <ASSIGN> Expr )? <SEMICOLON> |
CreateTable | ::= | ( <GLOBAL> <TEMPORARY> )? <TABLE> ( IDDot )? tableIdentifier RelationalList ( <ON> <COMMIT> ( <DELETE> | <PRESERVE> ) <ROWS> )? ( PhysicalPropertiesClause )? ( TablePropertiesClause )? |
TablePropertiesClause | ::= | ( <CACHE> | <NOCACHE> ) |
PhysicalPropertiesClause | ::= | ( ( SegmentAttributesClause | TableCompressionClause )+ | ( <ORGANIZATION> ( ( <HEAP> ( SegmentAttributesClause | TableCompressionClause )* ) | ( <INDEX> ( SegmentAttributesClause | IndexOrgTableClause )* ) ) ) | ( <CLUSTER> tableIdentifier <OPENPAREN> tableIdentifier ( <COMMA> tableIdentifier )* <CLOSEPAREN> ) ) |
IndexOrgTableClause | ::= | ( ( <PCTTHRESHOLD> NumberLiteral ) | TableCompressionClause ) |
TableCompressionClause | ::= | ( ( <COMPRESS> NumberLiteral ) | <NOCOMPRESS> ) |
SegmentAttributesClause | ::= | ( PhysicalAttributesClause | LoggingClause | ( <TABLESPACE> tableIdentifier ) ) |
CreateUser | ::= | <USER> tableIdentifier <IDENTIFIED> <BY> Identifier |
RelationalList | ::= | <OPENPAREN> RelationalProperties ( <COMMA> RelationalProperties )* <CLOSEPAREN> |
RelationalListWithIO | ::= | <OPENPAREN> RelationalPropertiesIO ( <COMMA> RelationalPropertiesIO )* <CLOSEPAREN> |
RelationalPropertiesIO | ::= | tableIdentifier ( <IN> )? ( <OUT> )? ( <NOCOPY> )? <COLUMN_TYPE> |
RelationalProperties | ::= | ( ( ( DefineColumn ( ColumnConstraint )* ) ) | TableConstraint ) |
TableConstraint | ::= | ( <CONSTRAINT> tableIdentifier )? ( ( ( <UNIQUE> | ( <PRIMARY> <KEY> ) ) <OPENPAREN> tableIdentifier ( <COMMA> tableIdentifier )* <CLOSEPAREN> ) | ForeignKeyClause | ( <CHECK> ) ) ( ConstraintState )? |
ColumnConstraint | ::= | ( ( ( <NOT> )? <NULL> ) | <UNIQUE> | ( <PRIMARY> <KEY> ) | ( ReferencesClause ) | ( <CHECK> ) ) ( ConstraintState )* |
ForeignKeyClause | ::= | <FOREIGN> <KEY> <OPENPAREN> tableIdentifier ( <COMMA> tableIdentifier )* <CLOSEPAREN> ReferencesClause |
ConstraintState | ::= | ( <ENABLE> | <DISABLE> | ( ( <NOT> )? <DEFERRABLE> ) | UsingIndexClause ) |
UsingIndexClause | ::= | <USING> <INDEX> ( PhysicalAttributesClause | LoggingClause | ( <TABLESPACE> tableIdentifier | <DEFAULT2> ) )* |
PhysicalAttributesClause | ::= | ( ( <PCTFREE> NumberLiteral ) | ( <PCTUSED> NumberLiteral ) | ( <INITRANS> NumberLiteral ) | ( <MAXTRANS> NumberLiteral ) | StorageClause ) |
LoggingClause | ::= | ( <LOGGING> | <NOLOGGING> ) |
StorageClause | ::= | <STORAGE> <OPENPAREN> ( ( <INITIAL> Size ) | ( <NEXT> Size ) | ( <MINEXTENTS> NumberLiteral ) | ( <MAXEXTENTS> ( NumberLiteral | <UNLIMITED> ) ) | ( <PCTINCREASE> NumberLiteral ) | ( <FREELIST> <GROUPS> NumberLiteral ) | ( <FREELISTS> NumberLiteral ) | ( <OPTIMAL> ( ( NumberLiteral | <NULL> ) )? ) | ( <BUFFER_POOL> ( <KEEP> | <RECYCLE> | <DEFAULT2> ) ) )+ <CLOSEPAREN> |
Size | ::= | ( <SIZE_LITERAL> | NumberLiteral ) |
Alter | ::= | <ALTER> <TABLE> ( tableIDDot )? tableIdentifier ( AlterSimple | AlterMulti ) |
AlterSimple | ::= | ( ( <RENAME> <TO> tableIdentifier ) | RecordsPerBlockClause ) |
RecordsPerBlockClause | ::= | ( <MINIMIZE> | <NOMINIMIZE> ) <RECORDS_PER_BLOCK> |
AlterMulti | ::= | ( ( <ADD> ( ( <OPENPAREN> AddColumnOptions <CLOSEPAREN> ) | ( AddColumnOptions ) ) ) | ( <MODIFY> <OPENPAREN> ModifyColumnOptions <CLOSEPAREN> ) )+ |
AddColumnOptions | ::= | DefineColumn ( ColumnRefConstraint )? ( ColumnConstraint )* ( <COMMA> DefineColumn ( ColumnRefConstraint )? ( ColumnConstraint )* )* |
ModifyColumnOptions | ::= | ModifyColumnOptionsSub ( <COMMA> ModifyColumnOptionsSub )* |
ModifyColumnOptionsSub | ::= | DefineColumn ( ColumnConstraint )? |
DefineColumn | ::= | tableIdentifier FullType ( <DEFAULT2> ( Identifier | Literal ) )? ( <GENERATED> <BY> <DEFAULT2> <AS> <IDENTITY> )? |
ColumnRefConstraint | ::= | ( ( <SCOPE> <IS> ( tableIDDot )? tableIdentifier ) | ( <WITH> <ROWID> ) | ( ( <CONSTRAINT> tableIdentifier )? ReferencesClause ) ) |
ReferencesClause | ::= | <REFERENCES> ( IDDot )? tableIdentifier ( <OPENPAREN> tableIdentifier <CLOSEPAREN> )? ( <ON> <DELETE> ( <CASCADE> | <SET> <NULL> ) )? |
FullType | ::= | <COLUMN_TYPE> ( <OPENPAREN> NumberLiteral ( <COMMA> NumberLiteral )? <CLOSEPAREN> )? |
SelectBase | ::= | ( SelectBaseAndUnion ( OrderByClause )? ( ForUpdateClause )? ) |
SelectBaseAndUnion | ::= | ( SelectSecond ( UnionPart SelectSecond )* ) |
Subquery | ::= | SelectBase |
SelectSecond | ::= | ( SelectThird | <OPENPAREN> Subquery <CLOSEPAREN> ) |
UnionPart | ::= | ( ( <UNION> ( <ALL> )? ) | <INTERSECT> | <MINUS2> ) |
ForUpdateClause | ::= | <FOR> <UPDATE> ( <OF> ForUpdateClauseElement ( <COMMA> ForUpdateClauseElement )* )? ( <NOWAIT> )? |
ForUpdateClauseElement | ::= | ( Identifier <DOT> )? Identifier <DOT> Identifier |
PreColumnsClause | ::= | ( <ALL> | ( <DISTINCT> | <UNIQUE> ) ) |
SelectThird | ::= | <SELECT> ( Hint )? ( PreColumnsClause )? SelectColumns ( SelectIntoStatement )? ( From ) ( WhereClause )? ( HierarchicalQueryClause )? ( GroupByClause )? |
SelectIntoStatement | ::= | <INTO> Identifier ( <COMMA> Identifier )* |
From | ::= | <FROM> ( TableRefference ( <COMMA> TableRefference )* ) |
Hint | ::= | <HINT_COM_START> <HINT_COM_END> |
SelectColumns | ::= | ( <ASTERISK> | ( SelectColumnsElement ( <COMMA> SelectColumnsElement )* ) ) |
SelectColumnsElement | ::= | ( Expr ( ( <AS> )? ( Identifier | Literal ) )? ) |
TableRefference | ::= | QueryTableExpressionClause ( JoinedTable )* |
FlashBackClause | ::= | ( ( <VERSIONS> <BETWEEN> ( <SCAN> | <TIMESTAMP3> ) ( <MINVALUE> | Expr ) <AND> ( <MAXVALUE> | Expr ) ) | ( <AS> <OF> ( <SCAN> | <TIMESTAMP3> ) Expr ) ) |
JoinedTable | ::= | ( ( JoinType <JOIN> TableRefference ( ( ( <ON> Condition ) | ( <USING> <OPENPAREN> tableIdentifier ( <COMMA> tableIdentifier )* <CLOSEPAREN> ) ) ) ) | ( ( <CROSS> <JOIN> ) | ( <NATURAL> ( JoinType )? <JOIN> TableRefference ) ) ) |
JoinType | ::= | ( <INNER> | ( ( <LEFT> | <RIGHT> | <FULL> ) ( <OUTER> )? ) ) |
QueryTableExpressionClause | ::= | ( ( ( Subquery ) | ( ( tableIDDot )? tableIdentifier ( AtID )? ) ) ( FlashBackClause )? ( tableIdentifier )? ) |
UpdateStatement | ::= | <UPDATE> ( Hint )? QueryTableExpressionClause SetClause ( WhereClause )? ( ReturningClause )? |
SetClause | ::= | <SET> SetClauseElement ( <COMMA> SetClauseElement )* |
SetClauseElement | ::= | ( ( ( <OPENPAREN> ExpressionList <CLOSEPAREN> <EQUAL> <OPENPAREN> Subquery <CLOSEPAREN> ) ) | ( tableIdentifier <EQUAL> ( Expr | ( <OPENPAREN> Subquery <CLOSEPAREN> ) ) ) ) |
ReturningClause | ::= | <RETURNING> Expr ( <COMMA> Expr )* <INTO> tableIdentifier ( <COMMA> tableIdentifier )* |
DeleteStatement | ::= | <DELETE> ( Hint )? ( <FROM> )? QueryTableExpressionClause ( WhereClause )? ( ReturningClause )? |
InsertStatement | ::= | <INSERT> ( Hint )? <INTO> QueryTableExpressionClause ( InsertColumns )? ValueClauses |
InsertColumns | ::= | <OPENPAREN> tableIdentifier ( <COMMA> tableIdentifier )* <CLOSEPAREN> |
ValueClauses | ::= | ( ValueClause | Subquery ) ( <COMMA> ( ValueClause | Subquery ) )* |
ValueClause | ::= | <VALUES> <OPENPAREN> ( ExpressionList | Subquery ) <CLOSEPAREN> |
WhereClause | ::= | <WHERE> ( Condition ) |
HierarchicalQueryClause | ::= | ( <START> <WITH> Condition )? <CONNECT> <BY> Condition |
GroupByClause | ::= | <GROUP> <BY> ( ( Expr ( <COMMA> Expr )* ) | ( ( <CUBE> | <ROLLUP> ) <OPENPAREN> ExpressionList <CLOSEPAREN> ) ) ( <HAVING> Condition )? |
OrderByClause | ::= | <ORDER> <BY> OrderByElement ( <COMMA> OrderByElement )* |
OrderByElement | ::= | Expr ( <ASC> | <DESC> )? ( <NULLS> ( <FIRST> | <LAST> ) )? |
Condition | ::= | ConditionElement ( ( <AND> | <OR> ) ConditionElement )* |
ConditionElement | ::= | ( CompoundCondition | ( <OPENPAREN> ExpressionList <CLOSEPAREN> ( SimpleComparisonConditionList | GroupComparisonConditionList | MembershipConditionList ) ) | ( Expr ( SimpleComparisonCondition | GroupComparisonCondition | MembershipCondition | RangeCondition | NULLCondition | EXISTSCondition | LIKECondition ) ) ) |
SimpleComparisonCondition | ::= | CompareOperator ConditionR3 |
GroupComparisonCondition | ::= | CompareOperator AnySomeAll ConditionR2 |
MembershipCondition | ::= | ( <NOT> )? <IN> ConditionR2 |
RangeCondition | ::= | ( <NOT> )? <BETWEEN> Expr <AND> Expr |
NULLCondition | ::= | <IS> ( <NOT> )? <NULL> |
EXISTSCondition | ::= | <EXISTS> <OPENPAREN> Subquery <CLOSEPAREN> |
LIKECondition | ::= | ( <NOT> )? <LIKE> ( <CHARACTER_LITERAL> | <QUESTIONMARK> | <BIND_LITERAL> ) ( <ESCAPE> <CHARACTER_LITERAL> )? |
SimpleComparisonConditionList | ::= | CompareEqualableOperator <OPENPAREN> Subquery <CLOSEPAREN> |
GroupComparisonConditionList | ::= | CompareEqualableOperator AnySomeAll ConditionR1 |
MembershipConditionList | ::= | ( <NOT> )? <IN> ConditionR1 |
ConditionR1 | ::= | <OPENPAREN> ( Subquery | ExpressionList ) <CLOSEPAREN> |
ConditionR2 | ::= | ( <OPENPAREN> ExpressionList <CLOSEPAREN> | ( <OPENPAREN> Subquery <CLOSEPAREN> ) ) |
ConditionR3 | ::= | ( Expr | ( <OPENPAREN> Subquery <CLOSEPAREN> ) ) |
AnySomeAll | ::= | ( <ANY> | <SOME> | <ALL> ) |
CompoundCondition | ::= | ( ( <NOT> Condition ) | ( <OPENPAREN> Condition <CLOSEPAREN> ) ) |
Expr | ::= | ( ExprComp ( ( Operator ) ExprComp )* ) |
ExprComp | ::= | ( UserFunction | SimpleExpression | CompoundExpression | BuiltInFunctionExpression | DecodeExpression | CaseExression ) |
DecodeExpression | ::= | <DECODE> <OPENPAREN> Expr ( <COMMA> Expr )* <CLOSEPAREN> |
ExpressionList | ::= | Expr ( <COMMA> Expr )* |
UserFunction | ::= | SchemaTableColumn <OPENPAREN> Expr ( <COMMA> Expr )* <CLOSEPAREN> |
SimpleExpression | ::= | ( SchemaTableColumn | Literal | <NULL> ) |
SchemaTableColumn | ::= | ( PseudoColumn | ( ( IDDot )? ( IDDot )? ( <ASTERISK> | <CURRVAL> | <NEXTVAL> | <QUESTIONMARK> | <BIND_LITERAL> | Identifier ) ( <JOINPLUS> )? ) ) |
AtID | ::= | <ATMARK> Identifier |
IDDot | ::= | Identifier <DOT> |
PseudoColumn | ::= | ( <LEVEL> | <ROWID> | <ROWNUM> ) |
CompoundExpression | ::= | ( ( <OPENPAREN> Expr <CLOSEPAREN> ) | ( ( <PLUS> | <MINUS> | <PRIOR> ) Expr ) ) |
Operator | ::= | ( <PLUS> | <MINUS> | <CONCAT> | <SLASH> | <ASTERISK> ) |
BuiltInFunctionExpression | ::= | Function ( <OPENPAREN> ( <ALL> | <DISTINCT> )? Expr ( <COMMA> Expr )* <CLOSEPAREN> )? |
Function | ::= | ( AggregateFunction | SingleRowFunction ) |
SingleRowFunction | ::= | ( Interval | DateTimeFunction | CharactorFunction | ConvertFunction | MiscellaneousFunction ) |
MiscellaneousFunction | ::= | ( Nvl | AbcFunction ) |
CaseExression | ::= | <CASE> ( Expr )? <WHEN> Expr <THEN> Expr ( <WHEN> Expr <THEN> Expr )* ( <ELSE> Expr )? <END> |
Nvl | ::= | ( ( <NVL2> <OPENPAREN> Expr <COMMA> Expr <COMMA> Expr <CLOSEPAREN> ) | ( <NVL> <OPENPAREN> Expr <COMMA> Expr <CLOSEPAREN> ) ) |
AbcFunction | ::= | ( ( ( <ABS> | <ACOS> | <ASCIISTR> | <ASCII> | <ASIN> | <ATAN> | <CARDINALITY> | <CEIL> | <CHARTOROWID> | <COS> | <COSH> | <EXP> | <FLOOR> | <LAST_DAY> | <LENGTH> | <LENGTHB> | <LN> ) <OPENPAREN> Expr <CLOSEPAREN> ) | ( ( <BIN_TO_NUM> | <COALESCE> ) <OPENPAREN> Expr ( <COMMA> Expr )* <CLOSEPAREN> ) | ( ( <ATAN2> | <BITAND> | <CONCAT> | <LOG> ) <OPENPAREN> Expr <COMMA> Expr <CLOSEPAREN> ) | ( <CHR> <OPENPAREN> ( <USING> <NCHAR_CS> )? <CLOSEPAREN> ) | ( <PI> <OPENPAREN> <CLOSEPAREN> ) ) |
CharactorFunction | ::= | ( ( ( <LPAD> | <RPAD> ) <OPENPAREN> ( Identifier | Literal ) <COMMA> Expr ( <COMMA> Literal )? <CLOSEPAREN> ) | ( ( <SUBSTR> | <SUBSTRB> | <REPLACE> | <TRANSLATE> ) <OPENPAREN> Expr <COMMA> Literal ( <COMMA> Literal )? <CLOSEPAREN> ) | ( ( <UPPER> | <LOWER> ) <OPENPAREN> Expr <CLOSEPAREN> ) | ( ( <LTRIM> | <RTRIM> ) <OPENPAREN> Expr ( <COMMA> Literal )? <CLOSEPAREN> ) | ( <TRIM> <OPENPAREN> ( Literal <FROM> )? Expr <CLOSEPAREN> ) ) |
ConvertFunction | ::= | ( ( ( <TO_CHAR> | <TO_DATE> | <TO_NUMBER> | <ROUND> ) <OPENPAREN> Expr ( <COMMA> Literal ( <COMMA> Literal )? )? <CLOSEPAREN> ) | ( <CAST> <OPENPAREN> Expr <AS> FullType <CLOSEPAREN> ) ) |
Interval | ::= | <INTERVAL> Literal ( <DAY> | <HOUR> | <MINUTE> | <SECOND> ) |
DateTimeFunction | ::= | ( <SYSDATE> | <CURRENT_DATE> | <CURRENT_TIMESTAMP> | ( ( <ADD_MONTHS> | <MONTHS_BETWEEN> ) <OPENPAREN> Expr <COMMA> Expr <CLOSEPAREN> ) | <DATEDIFF> <OPENPAREN> Expr <COMMA> Expr <COMMA> Expr <CLOSEPAREN> | <CURDATE> <OPENPAREN> <CLOSEPAREN> ) |
AggregateFunction | ::= | ( Count | MaxMinSum | RowNumber | Rank ) ( AnalyticClause )? |
AnalyticClause | ::= | <OVER> <OPENPAREN> ( <PARTITION> <BY> ExpressionList )? ( OrderByClause ( WindowingClause )? )? <CLOSEPAREN> |
WindowingClause | ::= | ( <ROWS> | <RANGE> ) ( ( <BETWEEN> ( ( <UNBOUNDED> <PRECEDING> ) | ( <CURRENT> <ROW> ) | ( NumberLiteral ( <PRECEDING> | <FOLLOWING> ) ) ) <AND> ( ( <UNBOUNDED> <FOLLOWING> ) | ( <CURRENT> <ROW> ) | ( NumberLiteral ( <PRECEDING> | <FOLLOWING> ) ) ) ) | ( ( <UNBOUNDED> <PRECEDING> ) | ( <CURRENT> <ROW> ) | ( NumberLiteral <PRECEDING> ) ) ) |
RowNumber | ::= | <ROW_NUMBER> <OPENPAREN> <CLOSEPAREN> |
Rank | ::= | ( <RANK> | <DENSE_RANK> ) <OPENPAREN> <CLOSEPAREN> |
Count | ::= | <COUNT> <OPENPAREN> ( <ASTERISK> | ( ( <ALL> | <DISTINCT> )? Expr ) ) <CLOSEPAREN> |
MaxMinSum | ::= | ( <MAX> | <MIN> | <SUM> | <AVG> ) <OPENPAREN> ( ( <ALL> | <DISTINCT> )? Expr ) <CLOSEPAREN> |
tableIDDot | ::= | tableIdentifier <DOT> |
tableIdentifier | ::= | ( ( <IDENTIFIER> | <STRING_LITERAL> ) ( <SHARP> )? ) |
Identifier | ::= | ( ( <IDENTIFIER> | <COUNT> | <FLOOR> ) ( <SHARP> )? ) |
Literal | ::= | ( <STRING_LITERAL> | <CHARACTER_LITERAL> | NumberLiteral | <CHR_DEF> ) |
NumberLiteral | ::= | ( ( <INTEGER_LITERAL> ) ( ( <DOT> <INTEGER_LITERAL> )? ) ) |
CompareOperator | ::= | ( CompareEqualableOperator | ( <GREATER> | <GREATEREQUAL> | <LESS> | <LESSEQUAL> ) ) |
CompareEqualableOperator | ::= | ( <EQUAL> | <NOTEQUAL> | <NOTEQUAL2> | <NOTEQUAL3> ) |