Classes in this File | Line Coverage | Branch Coverage | Complexity | ||||
OracleDatabase |
|
| 2.5;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 | } |