Coverage Report - liquibase.database.core.OracleDatabase
 
Classes in this File Line Coverage Branch Coverage Complexity
OracleDatabase
22%
17/76
22%
8/36
2.5
 
 1  
 package liquibase.database.core;
 2  
 
 3  
 import java.lang.reflect.Method;
 4  
 import java.sql.Connection;
 5  
 import java.util.Arrays;
 6  
 import java.util.List;
 7  
 import java.util.regex.Pattern;
 8  
 
 9  
 import liquibase.database.AbstractDatabase;
 10  
 import liquibase.database.DatabaseConnection;
 11  
 import liquibase.exception.DatabaseException;
 12  
 import liquibase.logging.LogFactory;
 13  
 import liquibase.statement.DatabaseFunction;
 14  
 
 15  
 /**
 16  
  * Encapsulates Oracle database support.
 17  
  */
 18  
 public class OracleDatabase extends AbstractDatabase {
 19  
     public static final String PRODUCT_NAME = "oracle";
 20  
 
 21  14
     public OracleDatabase() {
 22  
         // Setting list of Oracle's native functions
 23  14
         databaseFunctions.add(new DatabaseFunction("SYSDATE"));
 24  14
         databaseFunctions.add(new DatabaseFunction("SYSTIMESTAMP"));
 25  14
         databaseFunctions.add(new DatabaseFunction("CURRENT_TIMESTAMP"));
 26  14
     }
 27  
 
 28  
     @Override
 29  
     public int getPriority() {
 30  0
         return PRIORITY_DEFAULT;
 31  
     }
 32  
 
 33  
     @Override
 34  
     public void setConnection(DatabaseConnection conn) {
 35  
         try {
 36  0
             Method wrappedConn = conn.getClass().getMethod("getWrappedConnection");
 37  0
             wrappedConn.setAccessible(true);
 38  0
             Connection sqlConn = (Connection) wrappedConn.invoke(conn);
 39  0
             Method method = sqlConn.getClass().getMethod("setRemarksReporting", Boolean.TYPE);
 40  0
             method.setAccessible(true);
 41  0
             method.invoke(sqlConn, true);
 42  0
         } catch (Exception e) {
 43  0
             LogFactory.getLogger().info("Could not set remarks reporting on OracleDatabase: " + e.getMessage());
 44  
             ; // cannot set it. That is OK
 45  0
         }
 46  0
         super.setConnection(conn);
 47  0
     }
 48  
 
 49  
     @Override
 50  
     public String getTypeName() {
 51  56
         return "oracle";
 52  
     }
 53  
 
 54  
     @Override
 55  
     public String generatePrimaryKeyName(String tableName) {
 56  0
         if (tableName.length() > 27) {
 57  0
             return "PK_" + tableName.toUpperCase().substring(0, 27);
 58  
         } else {
 59  0
             return "PK_" + tableName.toUpperCase();
 60  
         }
 61  
     }
 62  
 
 63  
     @Override
 64  
     public boolean supportsInitiallyDeferrableColumns() {
 65  1
         return true;
 66  
     }
 67  
 
 68  
     @Override
 69  
     public String escapeDatabaseObject(String objectName) {
 70  
         // escape the object name if it contains any non-word characters
 71  26
         if (objectName != null && (Pattern.compile("\\W").matcher(objectName).find() || isReservedWord(objectName))) {
 72  0
             return "\"" + objectName.trim().toUpperCase() + "\"";
 73  
         } else {
 74  26
             return objectName;
 75  
         }
 76  
     }
 77  
 
 78  
     @Override
 79  
     public boolean isReservedWord(String objectName) {
 80  20
         return reservedWords.contains(objectName.toUpperCase());
 81  
     }
 82  
 
 83  
     @Override
 84  
     public boolean supportsSequences() {
 85  18
         return true;
 86  
     }
 87  
 
 88  
     @Override
 89  
     public boolean isCorrectDatabaseImplementation(DatabaseConnection conn) throws DatabaseException {
 90  1
         return PRODUCT_NAME.equalsIgnoreCase(conn.getDatabaseProductName());
 91  
     }
 92  
 
 93  
     @Override
 94  
     public String getDefaultDriver(String url) {
 95  0
         if (url.startsWith("jdbc:oracle")) {
 96  0
             return "oracle.jdbc.OracleDriver";
 97  
         }
 98  0
         return null;
 99  
     }
 100  
 
 101  
     @Override
 102  
     public String getCurrentDateTimeFunction() {
 103  5
         if (currentDateTimeFunction != null) {
 104  0
             return currentDateTimeFunction;
 105  
         }
 106  5
         return "SYSTIMESTAMP";
 107  
     }
 108  
 
 109  
     @Override
 110  
     protected String getDefaultDatabaseSchemaName() throws DatabaseException { // NOPMD
 111  0
         return super.getDefaultDatabaseSchemaName().toUpperCase();
 112  
     }
 113  
 
 114  
     @Override
 115  
     public String escapeIndexName(String schemaName, String indexName) {
 116  0
         String escapedIndexName = indexName;
 117  0
         if (schemaName != null) {
 118  0
             escapedIndexName = schemaName + "." + escapedIndexName;
 119  
         }
 120  0
         return escapedIndexName;
 121  
     }
 122  
 
 123  
     /**
 124  
      * Return an Oracle date literal with the same value as a string formatted using ISO 8601.
 125  
      * <p/>
 126  
      * Convert an ISO8601 date string to one of the following results: to_date('1995-05-23', 'YYYY-MM-DD')
 127  
      * to_date('1995-05-23 09:23:59', 'YYYY-MM-DD HH24:MI:SS')
 128  
      * <p/>
 129  
      * Implementation restriction: Currently, only the following subsets of ISO8601 are supported: YYYY-MM-DD
 130  
      * YYYY-MM-DDThh:mm:ss
 131  
      */
 132  
     @Override
 133  
     public String getDateLiteral(String isoDate) {
 134  0
         String normalLiteral = super.getDateLiteral(isoDate);
 135  
 
 136  0
         if (isDateOnly(isoDate)) {
 137  0
             StringBuffer val = new StringBuffer();
 138  0
             val.append("to_date(");
 139  0
             val.append(normalLiteral);
 140  0
             val.append(", 'YYYY-MM-DD')");
 141  0
             return val.toString();
 142  0
         } else if (isTimeOnly(isoDate)) {
 143  0
             StringBuffer val = new StringBuffer();
 144  0
             val.append("to_date(");
 145  0
             val.append(normalLiteral);
 146  0
             val.append(", 'HH24:MI:SS')");
 147  0
             return val.toString();
 148  0
         } else if (isDateTime(isoDate)) {
 149  0
             normalLiteral = normalLiteral.substring(0, normalLiteral.lastIndexOf('.')) + "'";
 150  
 
 151  0
             StringBuffer val = new StringBuffer(26);
 152  0
             val.append("to_date(");
 153  0
             val.append(normalLiteral);
 154  0
             val.append(", 'YYYY-MM-DD HH24:MI:SS')");
 155  0
             return val.toString();
 156  
         } else {
 157  0
             return "UNSUPPORTED:" + isoDate;
 158  
         }
 159  
     }
 160  
 
 161  
     @Override
 162  
     public boolean isSystemTable(String catalogName, String schemaName, String tableName) {
 163  0
         if (super.isSystemTable(catalogName, schemaName, tableName)) {
 164  0
             return true;
 165  0
         } else if (tableName.startsWith("BIN$")) { // oracle deleted table
 166  0
             return true;
 167  0
         } else if (tableName.startsWith("AQ$")) { // oracle AQ tables
 168  0
             return true;
 169  0
         } else if (tableName.startsWith("DR$")) { // oracle index tables
 170  0
             return true;
 171  0
         } else if (tableName.startsWith("SYS_IOT_OVER")) { // oracle system table
 172  0
             return true;
 173  
         }
 174  0
         return false;
 175  
     }
 176  
 
 177  
     @Override
 178  
     public boolean shouldQuoteValue(String value) {
 179  4
         return super.shouldQuoteValue(value) && !value.startsWith("to_date(")
 180  
                 && !value.equalsIgnoreCase(getCurrentDateTimeFunction());
 181  
     }
 182  
 
 183  
     @Override
 184  
     public boolean supportsTablespaces() {
 185  0
         return true;
 186  
     }
 187  
 
 188  
     @Override
 189  
     public boolean supportsAutoIncrement() {
 190  6
         return false;
 191  
     }
 192  
 
 193  
     // public Set<UniqueConstraint> findUniqueConstraints(String schema) throws DatabaseException {
 194  
     // Set<UniqueConstraint> returnSet = new HashSet<UniqueConstraint>();
 195  
     //
 196  
     // List<Map> maps = new Executor(this).queryForList(new
 197  
     // RawSqlStatement("SELECT UC.CONSTRAINT_NAME, UCC.TABLE_NAME, UCC.COLUMN_NAME FROM USER_CONSTRAINTS UC, USER_CONS_COLUMNS UCC WHERE UC.CONSTRAINT_NAME=UCC.CONSTRAINT_NAME AND CONSTRAINT_TYPE='U' ORDER BY UC.CONSTRAINT_NAME"));
 198  
     //
 199  
     // UniqueConstraint constraint = null;
 200  
     // for (Map map : maps) {
 201  
     // if (constraint == null || !constraint.getName().equals(constraint.getName())) {
 202  
     // returnSet.add(constraint);
 203  
     // Table table = new Table((String) map.get("TABLE_NAME"));
 204  
     // constraint = new UniqueConstraint(map.get("CONSTRAINT_NAME").toString(), table);
 205  
     // }
 206  
     // }
 207  
     // if (constraint != null) {
 208  
     // returnSet.add(constraint);
 209  
     // }
 210  
     //
 211  
     // return returnSet;
 212  
     // }
 213  
 
 214  
     @Override
 215  
     public boolean supportsRestrictForeignKeys() {
 216  0
         return false;
 217  
     }
 218  
 
 219  14
     private List<String> reservedWords = Arrays.asList(
 220  
     // "ACCESS",
 221  
     // "ACCOUNT",
 222  
     // "ACTIVATE",
 223  
     // "ADD",
 224  
     // "ADMIN",
 225  
     // "ADVISE",
 226  
     // "AFTER",
 227  
     // "ALL",
 228  
     // "ALL_ROWS",
 229  
     // "ALLOCATE",
 230  
     // "ALTER",
 231  
     // "ANALYZE",
 232  
     // "AND",
 233  
     // "ANY",
 234  
     // "ARCHIVE",
 235  
     // "ARCHIVELOG",
 236  
     // "ARRAY",
 237  
     // "AS",
 238  
     // "ASC",
 239  
     // "AT",
 240  
     // "AUDIT",
 241  
     // "AUTHENTICATED",
 242  
     // "AUTHORIZATION",
 243  
     // "AUTOEXTEND",
 244  
     // "AUTOMATIC",
 245  
     // "BACKUP",
 246  
     // "BECOME",
 247  
     // "BEFORE",
 248  
     // "BEGIN",
 249  
     // "BETWEEN",
 250  
     // "BFILE",
 251  
     // "BITMAP",
 252  
     // "BLOB",
 253  
     // "BLOCK",
 254  
     // "BODY",
 255  
     // "BY",
 256  
     // "CACHE",
 257  
     // "CACHE_INSTANCES",
 258  
     // "CANCEL",
 259  
     // "CASCADE",
 260  
     // "CAST",
 261  
     // "CFILE",
 262  
     // "CHAINED",
 263  
     // "CHANGE",
 264  
     // "CHAR",
 265  
     // "CHAR_CS",
 266  
     // "CHARACTER",
 267  
     // "CHECK",
 268  
     // "CHECKPOINT",
 269  
     // "CHOOSE",
 270  
     // "CHUNK",
 271  
     // "CLEAR",
 272  
     // "CLOB",
 273  
     // "CLONE",
 274  
     // "CLOSE",
 275  
     // "CLOSE_CACHED_OPEN_CURSORS",
 276  
     // "CLUSTER",
 277  
     // "COALESCE",
 278  
     // "COLUMN",
 279  
     // "COLUMNS",
 280  
     // "COMMENT",
 281  
     // "COMMIT",
 282  
     // "COMMITTED",
 283  
     // "COMPATIBILITY",
 284  
     // "COMPILE",
 285  
     // "COMPLETE",
 286  
     // "COMPOSITE_LIMIT",
 287  
     // "COMPRESS",
 288  
     // "COMPUTE",
 289  
     // "CONNECT",
 290  
     // "CONNECT_TIME",
 291  
     // "CONSTRAINT",
 292  
     // "CONSTRAINTS",
 293  
     // "CONTENTS",
 294  
     // "CONTINUE",
 295  
     // "CONTROLFILE",
 296  
     // "CONVERT",
 297  
     // "COST",
 298  
     // "CPU_PER_CALL",
 299  
     // "CPU_PER_SESSION",
 300  
     // "CREATE",
 301  
     // "CURRENT",
 302  
     // "CURRENT_SCHEMA",
 303  
     // "CURREN_USER",
 304  
     // "CURSOR",
 305  
     // "CYCLE",
 306  
     // "DANGLING",
 307  
     // "DATABASE",
 308  
     // "DATAFILE",
 309  
     // "DATAFILES",
 310  
     // "DATAOBJNO",
 311  
     // "DATE",
 312  
     // "DBA",
 313  
     // "DBHIGH",
 314  
     // "DBLOW",
 315  
     // "DBMAC",
 316  
     // "DEALLOCATE",
 317  
     // "DEBUG",
 318  
     // "DEC",
 319  
     // "DECIMAL",
 320  
     // "DECLARE",
 321  
     // "DEFAULT",
 322  
     // "DEFERRABLE",
 323  
     // "DEFERRED",
 324  
     // "DEGREE",
 325  
     // "DELETE",
 326  
     // "DEREF",
 327  
     // "DESC",
 328  
     // "DIRECTORY",
 329  
     // "DISABLE",
 330  
     // "DISCONNECT",
 331  
     // "DISMOUNT",
 332  
     // "DISTINCT",
 333  
     // "DISTRIBUTED",
 334  
     // "DML",
 335  
     // "DOUBLE",
 336  
     // "DROP",
 337  
     // "DUMP",
 338  
     // "EACH",
 339  
     // "ELSE",
 340  
     // "ENABLE",
 341  
     // "END",
 342  
     // "ENFORCE",
 343  
     // "ENTRY",
 344  
     // "ESCAPE",
 345  
     // "EXCEPT",
 346  
     // "EXCEPTIONS",
 347  
     // "EXCHANGE",
 348  
     // "EXCLUDING",
 349  
     // "EXCLUSIVE",
 350  
     // "EXECUTE",
 351  
     // "EXISTS",
 352  
     // "EXPIRE",
 353  
     // "EXPLAIN",
 354  
     // "EXTENT",
 355  
     // "EXTENTS",
 356  
     // "EXTERNALLY",
 357  
     // "FAILED_LOGIN_ATTEMPTS",
 358  
     // "FALSE",
 359  
     // "FAST",
 360  
     // "FILE",
 361  
     // "FIRST_ROWS",
 362  
     // "FLAGGER",
 363  
     // "FLOAT",
 364  
     // "FLOB",
 365  
     // "FLUSH",
 366  
     // "FOR",
 367  
     // "FORCE",
 368  
     // "FOREIGN",
 369  
     // "FREELIST",
 370  
     // "FREELISTS",
 371  
     // "FROM",
 372  
     // "FULL",
 373  
     // "FUNCTION",
 374  
     // "GLOBAL",
 375  
     // "GLOBALLY",
 376  
     // "GLOBAL_NAME",
 377  
     // "GRANT",
 378  
     // "GROUP",
 379  
     // "GROUPS",
 380  
     // "HASH",
 381  
     // "HASHKEYS",
 382  
     // "HAVING",
 383  
     // "HEADER",
 384  
     // "HEAP",
 385  
     // "IDENTIFIED",
 386  
     // "IDGENERATORS",
 387  
     // "IDLE_TIME",
 388  
     // "IF",
 389  
     // "IMMEDIATE",
 390  
     // "IN",
 391  
     // "INCLUDING",
 392  
     // "INCREMENT",
 393  
     // "INDEX",
 394  
     // "INDEXED",
 395  
     // "INDEXES",
 396  
     // "INDICATOR",
 397  
     // "IND_PARTITION",
 398  
     // "INITIAL",
 399  
     // "INITIALLY",
 400  
     // "INITRANS",
 401  
     // "INSERT",
 402  
     // "INSTANCE",
 403  
     // "INSTANCES",
 404  
     // "INSTEAD",
 405  
     // "INT",
 406  
     // "INTEGER",
 407  
     // "INTERMEDIATE",
 408  
     // "INTERSECT",
 409  
     // "INTO",
 410  
     // "IS",
 411  
     // "ISOLATION",
 412  
     // "ISOLATION_LEVEL",
 413  
     // "KEEP",
 414  
     // "KEY",
 415  
     // "KILL",
 416  
     // "LABEL",
 417  
     // "LAYER",
 418  
     // "LESS",
 419  
     // "LEVEL",
 420  
     // "LIBRARY",
 421  
     // "LIKE",
 422  
     // "LIMIT",
 423  
     // "LINK",
 424  
     // "LIST",
 425  
     // "LOB",
 426  
     // "LOCAL",
 427  
     // "LOCK",
 428  
     // "LOCKED",
 429  
     // "LOG",
 430  
     // "LOGFILE",
 431  
     // "LOGGING",
 432  
     // "LOGICAL_READS_PER_CALL",
 433  
     // "LOGICAL_READS_PER_SESSION",
 434  
     // "LONG",
 435  
     // "MANAGE",
 436  
     // "MASTER",
 437  
     // "MAX",
 438  
     // "MAXARCHLOGS",
 439  
     // "MAXDATAFILES",
 440  
     // "MAXEXTENTS",
 441  
     // "MAXINSTANCES",
 442  
     // "MAXLOGFILES",
 443  
     // "MAXLOGHISTORY",
 444  
     // "MAXLOGMEMBERS",
 445  
     // "MAXSIZE",
 446  
     // "MAXTRANS",
 447  
     // "MAXVALUE",
 448  
     // "MIN",
 449  
     // "MEMBER",
 450  
     // "MINIMUM",
 451  
     // "MINEXTENTS",
 452  
     // "MINUS",
 453  
     // "MINVALUE",
 454  
     // "MLSLABEL",
 455  
     // "MLS_LABEL_FORMAT",
 456  
     // "MODE",
 457  
     // "MODIFY",
 458  
     // "MOUNT",
 459  
     // "MOVE",
 460  
     // "MTS_DISPATCHERS",
 461  
     // "MULTISET",
 462  
     // "NATIONAL",
 463  
     // "NCHAR",
 464  
     // "NCHAR_CS",
 465  
     // "NCLOB",
 466  
     // "NEEDED",
 467  
     // "NESTED",
 468  
     // "NETWORK",
 469  
     // "NEW",
 470  
     // "NEXT",
 471  
     // "NOARCHIVELOG",
 472  
     // "NOAUDIT",
 473  
     // "NOCACHE",
 474  
     // "NOCOMPRESS",
 475  
     // "NOCYCLE",
 476  
     // "NOFORCE",
 477  
     // "NOLOGGING",
 478  
     // "NOMAXVALUE",
 479  
     // "NOMINVALUE",
 480  
     // "NONE",
 481  
     // "NOORDER",
 482  
     // "NOOVERRIDE",
 483  
     // "NOPARALLEL",
 484  
     // "NOPARALLEL",
 485  
     // "NOREVERSE",
 486  
     // "NORMAL",
 487  
     // "NOSORT",
 488  
     // "NOT",
 489  
     // "NOTHING",
 490  
     // "NOWAIT",
 491  
     // "NULL",
 492  
     // "NUMBER",
 493  
     // "NUMERIC",
 494  
     // "NVARCHAR2",
 495  
     // "OBJECT",
 496  
     // "OBJNO",
 497  
     // "OBJNO_REUSE",
 498  
     // "OF",
 499  
     // "OFF",
 500  
     // "OFFLINE",
 501  
     // "OID",
 502  
     // "OIDINDEX",
 503  
     // "OLD",
 504  
     // "ON",
 505  
     // "ONLINE",
 506  
     // "ONLY",
 507  
     // "OPCODE",
 508  
     // "OPEN",
 509  
     // "OPTIMAL",
 510  
     // "OPTIMIZER_GOAL",
 511  
     // "OPTION",
 512  
     // "OR",
 513  
     // "ORDER",
 514  
     // "ORGANIZATION",
 515  
     // "OSLABEL",
 516  
     // "OVERFLOW",
 517  
     // "OWN",
 518  
     // "PACKAGE",
 519  
     // "PARALLEL",
 520  
     // "PARTITION",
 521  
     // "PASSWORD",
 522  
     // "PASSWORD_GRACE_TIME",
 523  
     // "PASSWORD_LIFE_TIME",
 524  
     // "PASSWORD_LOCK_TIME",
 525  
     // "PASSWORD_REUSE_MAX",
 526  
     // "PASSWORD_REUSE_TIME",
 527  
     // "PASSWORD_VERIFY_FUNCTION",
 528  
     // "PCTFREE",
 529  
     // "PCTINCREASE",
 530  
     // "PCTTHRESHOLD",
 531  
     // "PCTUSED",
 532  
     // "PCTVERSION",
 533  
     // "PERCENT",
 534  
     // "PERMANENT",
 535  
     // "PLAN",
 536  
     // "PLSQL_DEBUG",
 537  
     // "POST_TRANSACTION",
 538  
     // "PRECISION",
 539  
     // "PRESERVE",
 540  
     // "PRIMARY",
 541  
     // "PRIOR",
 542  
     // "PRIVATE",
 543  
     // "PRIVATE_SGA",
 544  
     // "PRIVILEGE",
 545  
     // "PRIVILEGES",
 546  
     // "PROCEDURE",
 547  
     // "PROFILE",
 548  
     // "PUBLIC",
 549  
     // "PURGE",
 550  
     // "QUEUE",
 551  
     // "QUOTA",
 552  
     // "RANGE",
 553  
     // "RAW",
 554  
     // "RBA",
 555  
     // "READ",
 556  
     // "READUP",
 557  
     // "REAL",
 558  
     // "REBUILD",
 559  
     // "RECOVER",
 560  
     // "RECOVERABLE",
 561  
     // "RECOVERY",
 562  
     // "REF",
 563  
     // "REFERENCES",
 564  
     // "REFERENCING",
 565  
     // "REFRESH",
 566  
     // "RENAME",
 567  
     // "REPLACE",
 568  
     // "RESET",
 569  
     // "RESETLOGS",
 570  
     // "RESIZE",
 571  
     // "RESOURCE",
 572  
     // "RESTRICTED",
 573  
     // "RETURN",
 574  
     // "RETURNING",
 575  
     // "REUSE",
 576  
     // "REVERSE",
 577  
     // "REVOKE",
 578  
     // "ROLE",
 579  
     // "ROLES",
 580  
     // "ROLLBACK",
 581  
     // "ROW",
 582  
     // "ROWID",
 583  
     // "ROWNUM",
 584  
     // "ROWS",
 585  
     // "RULE",
 586  
     // "SAMPLE",
 587  
     // "SAVEPOINT",
 588  
     // "SB4",
 589  
     // "SCAN_INSTANCES",
 590  
     // "SCHEMA",
 591  
     // "SCN",
 592  
     // "SCOPE",
 593  
     // "SD_ALL",
 594  
     // "SD_INHIBIT",
 595  
     // "SD_SHOW",
 596  
     // "SEGMENT",
 597  
     // "SEG_BLOCK",
 598  
     // "SEG_FILE",
 599  
     // "SELECT",
 600  
     // "SEQUENCE",
 601  
     // "SERIALIZABLE",
 602  
             "SESSION",
 603  
             // "SESSION_CACHED_CURSORS",
 604  
             // "SESSIONS_PER_USER",
 605  
             // "SET",
 606  
             // "SHARE",
 607  
             // "SHARED",
 608  
             // "SHARED_POOL",
 609  
             // "SHRINK",
 610  
             // "SIZE",
 611  
             // "SKIP",
 612  
             // "SKIP_UNUSABLE_INDEXES",
 613  
             // "SMALLINT",
 614  
             // "SNAPSHOT",
 615  
             // "SOME",
 616  
             // "SORT",
 617  
             // "SPECIFICATION",
 618  
             // "SPLIT",
 619  
             // "SQL_TRACE",
 620  
             // "STANDBY",
 621  
             // "START",
 622  
             // "STATEMENT_ID",
 623  
             // "STATISTICS",
 624  
             // "STOP",
 625  
             // "STORAGE",
 626  
             // "STORE",
 627  
             // "STRUCTURE",
 628  
             // "SUCCESSFUL",
 629  
             // "SWITCH",
 630  
             // "SYS_OP_ENFORCE_NOT_NULL",
 631  
             // "SYS_OP_NTCIMG",
 632  
             // "SYNONYM",
 633  
             // "SYSDATE",
 634  
             // "SYSDBA",
 635  
             // "SYSOPER",
 636  
             // "SYSTEM",
 637  
             // "TABLE",
 638  
             // "TABLES",
 639  
             // "TABNO",
 640  
             // "TEMPORARY",
 641  
             // "THAN",
 642  
             // "THE",
 643  
             // "THEN",
 644  
             // "THREAD",
 645  
             // "TIMESTAMP",
 646  
             // "TIME",
 647  
             // "TO",
 648  
             // "TOPLEVEL",
 649  
             // "TRACE",
 650  
             // "TRACING",
 651  
             // "TRANSACTION",
 652  
             // "TRANSITIONAL",
 653  
             // "TRIGGER",
 654  
             // "TRIGGERS",
 655  
             // "TRUE",
 656  
             // "TRUNCATE",
 657  
             // "TX",
 658  
             // "TYPE",
 659  
             // "UB2",
 660  
             // "UBA",
 661  
             // "UID",
 662  
             // "UNARCHIVED",
 663  
             // "UNDO",
 664  
             // "UNION",
 665  
             // "UNIQUE",
 666  
             // "UNLIMITED",
 667  
             // "UNLOCK",
 668  
             // "UNRECOVERABLE",
 669  
             // "UNTIL",
 670  
             // "UNUSABLE",
 671  
             // "UNUSED",
 672  
             // "UPDATABLE",
 673  
             // "UPDATE",
 674  
             // "USAGE",
 675  
             // "USE",
 676  
             "USER"
 677  
     // "USING",
 678  
     // "VALIDATE",
 679  
     // "VALIDATION",
 680  
     // "VALUE",
 681  
     // "VALUES",
 682  
     // "VARCHAR",
 683  
     // "VARCHAR2",
 684  
     // "VARYING",
 685  
     // "VIEW",
 686  
     // "WHEN",
 687  
     // "WHENEVER",
 688  
     // "WHERE",
 689  
     // "WITH",
 690  
     // "WITHOUT",
 691  
     // "WORK",
 692  
     // "WRITE",
 693  
     // "WRITEDOWN",
 694  
     // "WRITEUP",
 695  
     // "XID",
 696  
     // "YEAR"
 697  
             );
 698  
 }