想向一个表中增加一个新列,
要求此列属性为not null,需要写入默认值,
但是要求写入的默认值要根据表中各行数据的具体情况写入不同的值。请问:
一条sql语句可以完成上述功能吗?
alter table ……之类的或者只能先插入一个固定的默认值,然后再写一个存储过程来修改这个列的值?

解决方案 »

  1.   

    oracle的
    alter table tbname modify(col default xxx);
    好像不支持引用其他列,(测试版本817)用触发器吧。
      

  2.   

    如果说这一列的值由插入的其他值决定,
    那么推荐使用trigger。
    这也是触发器的强项
      

  3.   

    SQL> create table a(aa varchar(10));表已创建。SQL> alter table a add (bb varchar(10) not null);表已更改。SQL> desc a;
     名称                                      是否为空? 类型
     ----------------------------------------- -------- ------------- AA                                                 VARCHAR2(10)
     BB                                        NOT NULL VARCHAR2(10)
      

  4.   

    alter table a add (cc varchar(10) default 'cc' not null);
      

  5.   

    可能我说的意思还不够明白
    这是对正在使用的数据表结构的修改,我在这次修改中需要考虑历史数据的问题。
    当我增加了一个字段的时候,要根据历史数据对这个新字段写入正确的历史数据中的对应值显然这个是不能用triger的