Forum Stats

  • 3,741,299 Users
  • 2,248,407 Discussions
  • 7,861,732 Comments

Discussions

Keyword TIMESTAMP accepted as a column name

EdStevens
EdStevens Member Posts: 28,243 Gold Crown

I was engaged in a discussion on Stack Overflow (https://stackoverflow.com/questions/67923309/stored-procedure-to-return-no-of-records-for-current-minute-and-current-date?noredirect=1#comment120074071_67923309) where the OP had used TIMESTAMP as a column name. That wasn't the source of his problem, but I had pointed out that TIMESTAMP was a reserved word and couldn't be used as an object name. My assertion was challenged, so I did some testing and was shocked at the result:

SQL> conn scott/[email protected]

Connected.

SQL> --

SQL> select banner from v$version;


BANNER

--------------------------------------------------------------------------------

Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production


1 row selected.


SQL> --

SQL> CREATE table RCDC_THROTTLE

 2 (

 3   UUID varchar2(50) NOT NULL,

 4   TRANSACTIONTIMESTAMP timestamp NOT NULL,

 5   timestamp timestamp NOT NULL,

 6   REQTYPE varchar2(20) NOT NULL

 7 );


Table created.


SQL> --

SQL> col table_name for a15

SQL> col column_name for a20

SQL> col data_type for a15

SQL> select table_name,

 2        column_name,

 3        data_type

 4 from user_tab_cols

 5 where table_name='RCDC_THROTTLE';


TABLE_NAME     COLUMN_NAME         DATA_TYPE

--------------- -------------------- ---------------

RCDC_THROTTLE  UUID                VARCHAR2

RCDC_THROTTLE  TRANSACTIONTIMESTAMP TIMESTAMP(6)

RCDC_THROTTLE  TIMESTAMP           TIMESTAMP(6)

RCDC_THROTTLE  REQTYPE             VARCHAR2


4 rows selected.


SQL> --

SQL> drop table rcdc_throttle purge;


Table dropped.

I also tried it with reserved words 'DATE', 'NUMBER', and 'TABLE' as column names and they were all rejected as expected.

Have we uncovered a bug?

Answers

  • Solomon Yakobson
    Solomon Yakobson Member Posts: 18,517 Black Diamond

    Well, all according to V$RESERVED_WORDS:

    SQL> SELECT * FROM V$RESERVED_WORDS WHERE KEYWORD IN ('TIMESTAMP','DATE');
    
    
    KEYWORD        LENGTH RESERVED R R R D     CON_ID
    ---------- ---------- -------- - - - - ----------
    DATE                4 Y        N N N N          0
    TIMESTAMP           9 N        N N N N          0
    
    
    SQL>
    

    And Oracle itself uses TIMESTAMP as column name:

    SQL> SELECT OWNER,TABLE_NAME FROM DBA_TAB_COLS WHERE COLUMN_NAME = 'TIMESTAMP' ORDER BY OWNER,TABLE_NAME;
    
    
    OWNER                          TABLE_NAME
    ------------------------------ ------------------------------
    APPQOSSYS                      WLM_CLASSIFIER_PLAN
    APPQOSSYS                      WLM_FEATURE_USAGE
    APPQOSSYS                      WLM_METRICS_STREAM
    APPQOSSYS                      WLM_VIOLATION_STREAM
    DVSYS                          AUDIT_TRAIL$
    DVSYS                          DBA_DV_SIMULATION_LOG
    DVSYS                          DV$CONFIGURATION_AUDIT
    DVSYS                          DV$ENFORCEMENT_AUDIT
    DVSYS                          DV$SYS_OBJECT
    DVSYS                          SIMULATION_LOG$
    OJVMSYS                        OJDS$SHARED$OBJ$
    OUTLN                          OL$
    SYS                            ALL_CAPTURE_PREPARED_DATABASE
    SYS                            ALL_CAPTURE_PREPARED_SCHEMAS
    SYS                            ALL_CAPTURE_PREPARED_TABLES
    SYS                            ALL_OBJECTS
    SYS                            ALL_OBJECTS_AE
    SYS                            ALL_PROBE_OBJECTS
    SYS                            ALL_SQLSET_PLANS
    SYS                            ALL_SUMDELTA
    SYS                            ALL_SYNC_CAPTURE_PREPARED_TABS
    SYS                            ALL_TAB_MODIFICATIONS
    SYS                            AWR_PDB_RECOVERY_PROGRESS
    SYS                            AWR_PDB_SQL_PLAN
    SYS                            AWR_ROOT_RECOVERY_PROGRESS
    SYS                            AWR_ROOT_SQL_PLAN
    SYS                            CDBVW_STATS$
    SYS                            CDB_ADVISOR_SQLPLANS
    SYS                            CDB_AUDIT_EXISTS
    SYS                            CDB_AUDIT_OBJECT
    SYS                            CDB_AUDIT_SESSION
    SYS                            CDB_AUDIT_STATEMENT
    SYS                            CDB_AUDIT_TRAIL
    SYS                            CDB_CAPTURE_PREPARED_DATABASE
    SYS                            CDB_CAPTURE_PREPARED_SCHEMAS
    SYS                            CDB_CAPTURE_PREPARED_TABLES
    SYS                            CDB_CPU_USAGE_STATISTICS
    SYS                            CDB_EXP_FILES
    SYS                            CDB_FGA_AUDIT_TRAIL
    SYS                            CDB_HIST_RECOVERY_PROGRESS
    SYS                            CDB_HIST_SQL_PLAN
    SYS                            CDB_INVALID_OBJECTS
    SYS                            CDB_LOGSTDBY_LOG
    SYS                            CDB_OBJECTS
    SYS                            CDB_OBJECTS_AE
    SYS                            CDB_OUTLINES
    SYS                            CDB_REGISTRY_ERROR
    SYS                            CDB_SQLSET_PLANS
    SYS                            CDB_SQLTUNE_PLANS
    SYS                            CDB_SYNC_CAPTURE_PREPARED_TABS
    SYS                            CDB_TAB_MODIFICATIONS
    SYS                            CDB_WORKLOAD_REPLAY_DIVERGENCE
    SYS                            COL_GROUP_USAGE$
    SYS                            COL_USAGE$
    SYS                            DATA_PUMP_XPL_TABLE$
    SYS                            DBA_ADVISOR_SQLPLANS
    SYS                            DBA_AUDIT_EXISTS
    SYS                            DBA_AUDIT_OBJECT
    SYS                            DBA_AUDIT_SESSION
    SYS                            DBA_AUDIT_STATEMENT
    SYS                            DBA_AUDIT_TRAIL
    SYS                            DBA_CAPTURE_PREPARED_DATABASE
    SYS                            DBA_CAPTURE_PREPARED_SCHEMAS
    SYS                            DBA_CAPTURE_PREPARED_TABLES
    SYS                            DBA_CPU_USAGE_STATISTICS
    SYS                            DBA_EXP_FILES
    SYS                            DBA_FGA_AUDIT_TRAIL
    SYS                            DBA_HIST_RECOVERY_PROGRESS
    SYS                            DBA_HIST_SQL_PLAN
    SYS                            DBA_INVALID_OBJECTS
    SYS                            DBA_LOGSTDBY_LOG
    SYS                            DBA_OBJECTS
    SYS                            DBA_OBJECTS_AE
    SYS                            DBA_OUTLINES
    SYS                            DBA_REGISTRY_ERROR
    SYS                            DBA_SQLSET_PLANS
    SYS                            DBA_SQLTUNE_PLANS
    SYS                            DBA_SYNC_CAPTURE_PREPARED_TABS
    SYS                            DBA_TAB_MODIFICATIONS
    SYS                            DBA_WORKLOAD_REPLAY_DIVERGENCE
    SYS                            EVENT_TABLE
    SYS                            FIXED_OBJ$
    SYS                            GV_$ADVISOR_CURRENT_SQLPLAN
    SYS                            GV_$ASM_ESTIMATE
    SYS                            GV_$DATAGUARD_STATUS
    SYS                            GV_$DB_OBJECT_CACHE
    SYS                            GV_$DIAG_OPT_TRACE_RECORDS
    SYS                            GV_$DIAG_SQL_TRACE_RECORDS
    SYS                            GV_$DIAG_TRACE_FILE_CONTENTS
    SYS                            GV_$GOLDENGATE_MESSAGETRACKING
    SYS                            GV_$IMEU_HEADER
    SYS                            GV_$IM_HEADER
    SYS                            GV_$KERNEL_IO_OUTLIER
    SYS                            GV_$LOGMNR_CONTENTS
    SYS                            GV_$LOGMNR_DICTIONARY
    SYS                            GV_$QUARANTINE
    SYS                            GV_$RECOVERY_PROGRESS
    SYS                            GV_$SESSION_LONGOPS
    SYS                            GV_$SQL_PLAN
    SYS                            GV_$SQL_PLAN_STATISTICS_ALL
    SYS                            GV_$STREAMS_MESSAGE_TRACKING
    SYS                            GV_$XSTREAM_MESSAGE_TRACKING
    SYS                            KU$_OUTLINE_VIEW
    SYS                            MON_MODS$
    SYS                            MON_MODS_ALL$
    SYS                            MON_MODS_V
    SYS                            OPTSTAT_SNAPSHOT$
    SYS                            OPT_CALIBRATION_STATS$
    SYS                            PLAN_TABLE$
    SYS                            REGISTRY$ERROR
    SYS                            SQLOBJ$PLAN
    SYS                            SQLOBJ$PLAN_DATAPUMP
    SYS                            SQLOBJ$PLAN_DATAPUMP_TBL
    SYS                            STREAMS$_PREPARE_DDL
    SYS                            STREAMS$_PREPARE_OBJECT
    SYS                            SUMDELTA$
    SYS                            SUMPARTLOG$
    SYS                            USER_ADVISOR_SQLPLANS
    SYS                            USER_AUDIT_OBJECT
    SYS                            USER_AUDIT_SESSION
    SYS                            USER_AUDIT_STATEMENT
    SYS                            USER_AUDIT_TRAIL
    SYS                            USER_OBJECTS
    SYS                            USER_OBJECTS_AE
    SYS                            USER_OUTLINES
    SYS                            USER_SQLSET_PLANS
    SYS                            USER_SQLTUNE_PLANS
    SYS                            USER_TAB_MODIFICATIONS
    SYS                            V_$ADVISOR_CURRENT_SQLPLAN
    SYS                            V_$ASM_ESTIMATE
    SYS                            V_$CELL_DB
    SYS                            V_$CELL_DISK
    SYS                            V_$DATAGUARD_STATUS
    SYS                            V_$DB_OBJECT_CACHE
    SYS                            V_$DIAG_OPT_TRACE_RECORDS
    SYS                            V_$DIAG_SESS_OPT_TRACE_RECORDS
    SYS                            V_$DIAG_SESS_SQL_TRACE_RECORDS
    SYS                            V_$DIAG_SQL_TRACE_RECORDS
    SYS                            V_$DIAG_TRACE_FILE_CONTENTS
    SYS                            V_$GOLDENGATE_MESSAGE_TRACKING
    SYS                            V_$IMEU_HEADER
    SYS                            V_$IM_HEADER
    SYS                            V_$KERNEL_IO_OUTLIER
    SYS                            V_$LOGMNR_CONTENTS
    SYS                            V_$LOGMNR_DICTIONARY
    SYS                            V_$QUARANTINE
    SYS                            V_$RECOVERY_PROGRESS
    SYS                            V_$SESSION_LONGOPS
    SYS                            V_$SQL_PLAN
    SYS                            V_$SQL_PLAN_STATISTICS_ALL
    SYS                            V_$STREAMS_MESSAGE_TRACKING
    SYS                            V_$XSTREAM_MESSAGE_TRACKING
    SYS                            WRH$_RECOVERY_PROGRESS
    SYS                            WRH$_SQL_PLAN
    SYS                            WRHS$_SQL_PLAN
    SYS                            WRI$_ADV_SQLT_PLANS
    SYS                            WRI$_DBU_CPU_USAGE
    SYS                            WRI$_SQLSET_PLAN_LINES
    SYS                            WRI$_SQLSET_WORKSPACE_PLANS
    SYS                            _GV$SXGG_MESSAGE_TRACKING
    SYS                            _V$SXGG_MESSAGE_TRACKING
    SYSTEM                         LOGMNR_LOG$
    SYSTEM                         LOGMNR_PROCESSED_LOG$
    SYSTEM                         MVIEW$_ADV_JOURNAL
    SYSTEM                         MVIEW$_ADV_PLAN
    SYSTEM                         OL$
    
    166 rows selected.
    
    SQL>
    

    SY.

  • EdStevens
    EdStevens Member Posts: 28,243 Gold Crown

    Solomon - thanks for the reference. It strikes me as very strange that they would not classify TIMESTAMP as a "reserved" word. But I'd guess that the answer to "why" would be "you'd have to ask the oracle engineers".

Sign In or Register to comment.