create table a
(a_date date,
b_date date,
a_no number(3)
);
插入数据时对a_date插入日期,而b_date通过a_date+15实现。
insert into a
values(to_date('2010/1/1','yyyy/mm/dd'),a_date+15,123);
这么写显然是不对的,请教正确的写法?
排除直接计算后将结果插入的方法。
请各位指点!

解决方案 »

  1.   

    1、写个触发器。
    2、插入后再写一个update语句来更新。
    总的来看,上面的方法不如直接计算后插入数据好。
      

  2.   

    触发器
    create or replace trigger tr_a
      after insert on tmp  
    declare
    begin
      update tmp set b_date=a_date+15;
    end;
      

  3.   

    有两种方法:第一中:建立约束  b_date=b_date +5
    第二中:建立触发器。
      

  4.   

    多谢!我写了一个触发器:
    create trigger a_insert
    before insert or update on a
    for each row
    as begin
      if(new.a_date!=null)
      then new.b_date:=a_date+15;
    end if;
    end;
    然后竟然跳不出来了!
    我对触发器了解很浅,请教您一下这个触发器到底该怎么写?
      

  5.   

    --应该使用is not null
    create or replace trigger a_insert
    before insert or update on a
    for each row
    begin
      if new.a_date is not null then 
           new.b_date:=:new.a_date+15;
      end if;
    end;
      

  6.   

    很惆怅啊,我照样输进去了,可还是没有任何反应……一直按回车只有行数一直增加。难道是我用的简装版oracle有问题?
      

  7.   

    :new.b_date:=:new.a_date+15;
    对NEW和OLD的引用,都需要前面加冒号
      

  8.   

    create or replace trigger a_insert
    before insert or update on a
    for each row
    begin
      if :new.a_date is not null then 
      :new.b_date:=:new.a_date+15;
      end if;
    end;
      

  9.   

    insert into a
    values(to_date('2010/1/1','yyyy/mm/dd'),to_date('2010/1/1','yyyy/mm/dd')+15,123);
      

  10.   


    SQL> create table a
      2  (a_date date,
      3  b_date date,
      4  a_no number(3)
      5  );表已创建。SQL> create or replace trigger tri_d_date before insert or update of b_date on a for each row
      2  begin
      3  :new.b_date:=:new.a_date+15;
      4  end;
      5  /触发器已创建SQL> insert into a(a_date,a_no) values(sysdate,168);已创建 1 行。
    SQL> commit;提交完成。SQL> select * from a;A_DATE              B_DATE                    A_NO
    ------------------- ------------------- ----------
    2010-08-20 09:55:01 2010-09-04 09:55:01        168
      

  11.   

    用plsql也可以实现

    create or replace procedure a_insert (adate in varchar2, ano in number) as
    begin
    insert into a
    values(to_date(adate,'yyyy/mm/dd'),to_date(adate,'yyyy/mm/dd')+15,ano);
    end;
      

  12.   

    另一个方法更好点, 先插入再update, 在一个事务中执行