2012-07-17 18 views
0

如何將列添加到具有給定定義的現有表中。例如,我有一個名爲僱員的表,名爲hire_date。現在使用alter和只有 alter,我想添加一個名爲tenure的列,其中包含(hire_date和2012年7月14日)之間的區別。這是香港專業教育學院試圖使用alter來添加具有特定定義的列

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

你嘗試任何事情?如果是的話,請把它放在這裏.. – Jalpesh 2012-07-17 07:49:49

+0

聽起來像一個虛擬的列給我。您使用的是哪個Oracle版本? – Thilo 2012-07-17 07:53:13

+0

不想使用虛擬列,我可以使用案例。我希望這個專欄永久添加。我的版本是11.0.2.0.2和即時通訊使用SQL加 – user1356163 2012-07-17 07:55:09

回答

1

從11克開始,這應該工作:

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

錯誤在第1行: ORA-01861:文字不匹配格式字符串 – user1356163 2012-07-17 08:00:55

+1

嘗試'TO_DATE('20120714','YYYYMMDD')' – Thilo 2012-07-17 08:01:54

+0

即時通訊sql新手,但我們不必給類型的添加列? – user1356163 2012-07-17 08:03:02

1

由於新列可以從現有的列中得到,我不會把它添加到表中。保持派生列的一致性是很困難的,並且有更好的選擇。

相反,你可以創建一個將此列視圖:

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

或者你可以做任何select語句在運行計算:

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

erm ..它只能使用alter來完成。 Sry,但是我的上司不會讓我使用任何其他命令:( – user1356163 2012-07-17 07:57:00

+0

這是一個沒有任何意義的要求。 – Thilo 2012-07-17 08:49:36

相關問題