在Oracle 10G 建立表结构时有个“默认值”的东东这个怎么玩?
 
表ABC  列 A   B   C列A,B的值为正常输入。
列C的值=列A+列B,列C不能正常输入。
怎么在建立表结构时给列C设立个"默认值"

解决方案 »

  1.   

    这个动作可以通过trigger来完成吧..
      

  2.   

    A,B的是正常输入的,也就是说,这两个字段的值是不确定的
    而你要字段C的值是来自于字段A和B,并且default所描述的是一个确定值,
    同时如果用check约束来作的话,这个check约束也不知道如何写啊?所以个人观点是:建表时是不能够完成你所说的要求,要完成这些可以在存储过程中来实现:在插入数据时进行检验,只有当字段C的值包含在字段A和B的值所组成的集合内时,才让数据插入,否则不插入,
      

  3.   


    --头部文件CREATE OR REPLACE TRIGGER tri_test
    AFTER INSERT OR UPDATE
    ON 表
    FOR EACH ROW
    PRAGRA AUTONOMOUS_TRANSACTION
    --执行段
    BEGIN
           IF INSERTING or UPDATING  THEN
             :new.c =:new.a+:new.b;
           END IF;
          EXCEPTION
             WHEN others THEN
             null;
    END;
      

  4.   

    create or replace trigger trig_test
      before insert or update on table1  
      for each row
    declare
      -- local variables here
    begin
      :NEW.c := :NEW.a + :NEW.b;
    end trig_test;
      

  5.   

    Oracle没有计算列MSSQL就有计算列用触发器实现吧,楼上已经给出了正解
      

  6.   


    如果是11g的话可以用11g的新特性 虚拟列来定义c字段c as (a+b)
      

  7.   


    这是11g的新特性
    定义表的时候
    create table table_a (
    a number(2),
    b number(2),
    c as (a+b)
    )如果不是11g就只能
    用trigger来做了,或者,查询的时候自己定义一个view字段。
      

  8.   

    建视图可以么?
    create table show
    (
    a number,
    b number
    )create view show_view as select a,b,a+b as c from show
    select * from show_view
    insert into show values (1,2)