使用alter添加具有特定定义的列

时间:2012-07-17 07:47:13

标签: sql oracle alter

如何将列添加到具有给定定义的现有表中。例如,我有一个名为employee的表,其列名为hire_date。现在使用alter和 only alter,我想添加一个名为tenure的列,其中包含(hire_date和14-JULY-2012)之间的差异。这是我尝试过的

alter table employee add(tenure numeric(10) where tenure=(select to_date(
'14-JULY-2012')-HIRE_DATE from employee));

2 个答案:

答案 0 :(得分:1)

从11g开始,这应该有效:

ALTER TABLE employee 
 ADD tenure GENERATED ALWAYS 
   AS (TO_DATE('20120714','YYYYMMDD') - hire_date) VIRTUAL

答案 1 :(得分:1)

由于新列可以从现有列派生,因此我不会将其添加到表中。保持派生列的一致性是一项艰巨的工作,并且有更好的选择。

相反,您可以创建一个添加列的视图:

create view ViewName as
select  hire_date
,       hire_date - TO_DATE('20120714','YYYYMMDD') as DaysSinceJuly14th
,       ... other columns ...
from    employees

或者您可以在任何选择语句中动态进行计算:

select  hire_date - TO_DATE('20120714','YYYYMMDD') as DaysSinceJuly14th
from    employees
where   name = 'Jones'