更改表将列添加为select语句

时间:2015-01-14 05:42:12

标签: sql database oracle oracle9i

如何做这样的事......

alter table customer_schedule add (week_number as (TO_CHAR((SCHEDULE_DATE),'iw')) 

其中SCHEDULE_DATE是表

中现有的列之一

3 个答案:

答案 0 :(得分:7)

这是您需要 VIRTUAL COLUMN 的地方。如果你在11g及以上,你当然可以 -

alter table table_name
add (column_name [data_type] [generated always] as (column_expression) [virtual]);

在你的情况下,它会像 -

alter table customer_schedule add (week_number data_type generated always as (TO_CHAR((SCHEDULE_DATE),'iw') VIRTUAL) 

答案 1 :(得分:2)

在9i上,你不能使用虚拟列,所以我可能会选择一个视图:

create view customer_schedule_view as
    select 
      c.*,
      to_char(c.schedule_date, 'iw')) week_number
    from
      customer_schedule c;

当然,在表单中,您需要从视图而不是从表中进行选择。

答案 2 :(得分:0)

默认关键字应该允许您在缺少某些值时存储值,但由于限制,you cannot use a column name

  

DEFAULT表达式不能包含对PL / SQL函数或到其他列的引用,伪列LEVEL,PRIOR和ROWNUM,或者未完全指定的日期常量。

我认为行级BEFORE INSERT / UPDATE触发器应该是你想要的。