You are on page 1of 5

TEMPORAL VALIDITY

[oracle@DB12c ~]$ sqlplus system/oracle_4U


SQL*Plus: Release 12.1.0.1.0 Production on Sun Jun 15 12:07:53 2014
Copyright (c) 1982, 2013, Oracle. All rights reserved.
Last Successful login time: Sun Jun 15 2014 11:43:09 +05:30
Connected to:
Oracle Database 12c Enterprise Edition Release 12.1.0.1.0 - 64bit
Production
With the Partitioning, OLAP, Advanced Analytics and Real Application
Testing options

SQL> DROP TABLE hr.emp PURGE;


Table dropped.

SQL> CREATE TABLE HR.EMP


(EMPNO NUMBER, SALARY NUMBER, DEPTID NUMBER,
NAME VARCHAR2(100),
USER_TIME_START DATE,
USER_TIME_END
DATE,
PERIOD FOR USER_TIME
(USER_TIME_START, USER_TIME_END));
Table created.

SQL> select constraint_name from dba_constraints


where table_name ='EMP' and OWNER='HR';
CONSTRAINT_NAME
-------------------------------------------------------------------------
-------
USER_TIMEB4892B

SQL> INSERT INTO hr.emp (empno , salary , deptid , name ,


USER_TIME_START, USER_TIME_END)
VALUES (101,1900,90,'ADAM',
to_date('01-JAN-2000', 'dd-mon-yyyy') ,
to_date('31-DEC-2011', 'dd-mon-yyyy'));
1 row created.

SQL> commit;
Commit complete.
SQL> col name format A10
SQL> select NAME,
to_char(USER_time_start,'dd-mon-yyyy') "Start",
to_char(USER_time_end, 'dd-mon-yyyy') "End"
from hr.emp;
NAME Start End
---------- ----------- -----------
ADAM 01-jan-2000 31-dec-2011

SQL> DESC hr.emp


Name Null? Type
----------------------------------------- -------- ---------------------
-------
EMPNO NUMBER
SALARY NUMBER
DEPTID NUMBER
NAME VARCHAR2(100)
USER_TIME_START DATE
USER_TIME_END DATE

SQL> column TABLE_NAME format a40


SQL> column COLUMN_NAME format a40
SQL> set lines 300
SQL> select TABLE_NAME, COLUMN_NAME
2* from dba_tab_cols where owner='HR' and table_name='EMP'
TABLE_NAME COLUMN_NAME
---------------------------------------- --------------------------------
--------
EMP USER_TIME_END
EMP USER_TIME_START
EMP NAME
EMP DEPTID
EMP SALARY
EMP EMPNO
EMP USER_TIME
7 rows selected.

SQL> ALTER TABLE hr.emp DROP (PERIOD FOR user_time);


Table altered.

SQL> ALTER TABLE hr.emp ADD (PERIOD FOR VALID_time);


Table altered.

Note: You still see the USER_START_TIME and USER_END_TIME columns in both
describes because they are part of the user's definition of the table.
SQL> set lines 80
SQL> desc hr.emp
Name Null? Type
----------------------------------------- -------- ---------------------
-------
EMPNO NUMBER
SALARY NUMBER
DEPTID NUMBER
NAME VARCHAR2(100)
USER_TIME_START DATE
USER_TIME_END DATE

SQL> set lines 300


SQL> select TABLE_NAME, COLUMN_NAME
from dba_tab_cols where owner='HR' and table_name='EMP';
TABLE_NAME COLUMN_NAME
---------------------------------------- --------------------------------
--------
EMP VALID_TIME
EMP VALID_TIME_END
EMP USER_TIME_END
EMP USER_TIME_START
EMP NAME
EMP DEPTID
EMP SALARY
EMP EMPNO
EMP VALID_TIME_START
9 rows selected.

SQL> select NAME,to_char(valid_time_start, 'dd-mon-


yyyy'),to_char(valid_time_end, 'dd-mon-yyyy')
from hr.emp;
NAME TO_CHAR(VAL TO_CHAR(VAL
---------- ----------- -----------
ADAM

SQL> DROP TABLE hr.emp PURGE;


Table dropped.

SQL> CREATE TABLE HR.EMP


(EMPNO NUMBER, SALARY NUMBER, DEPTID NUMBER,
NAME VARCHAR2(100),
PERIOD FOR VALID_TIME );
Table created.
SQL> set lines 80
SQL> DESC hr.emp
Name Null? Type
----------------------------------------- -------- ---------------------
-------
EMPNO NUMBER
SALARY NUMBER
DEPTID NUMBER
NAME VARCHAR2(100)

SQL> insert into


hr.emp(empno,salary,deptid,name,valid_time_start,valid_time_end) values
(101,1900,90,'ADAM',to_date('01-jan-1990','dd-mon-yyyy'),to_date('31-dec-
2014','dd-mon-yyyy'));
1 row created.

SQL> insert into hr.emp values (101,1900,90,'ADAM',to_date('01-jan-


1990','dd-mon-yyyy'),to_date('31-dec-2014','dd-mon-yyyy'));
insert into hr.emp values (101,1900,90,'ADAM',to_date('01-jan-1990','dd-
mon-yyyy'),to_date('31-dec-2014','dd-mon-yyyy')) *
ERROR at line 1:
ORA-00913: too many values

SQL> select * from hr.emp;


EMPNO SALARY DEPTID NAME
---------- ---------- ---------- ----------
101 1900 90 ADAM

SQL> select NAME,


to_char(valid_time_start, 'dd-mon-yyyy') "Start",
to_char(valid_time_end, 'dd-mon-yyyy') "End"
from hr.emp;
NAME Start End
---------- ----------- -----------
ADAM 01-jan-1990 31-dec-2014

SQL> select NAME,


to_char(valid_time_start, 'dd-mon-yyyy') "Start",
to_char(valid_time_end, 'dd-mon-yyyy') "End"
from hr.emp AS OF PERIOD FOR valid_time
to_date('31-DEC-1992', 'dd-mon-yyyy') ;
NAME Start End
---------- ----------- -----------
ADAM 01-jan-1990 31-dec-2014

You might also like