如
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);
这么写显然是不对的,请教正确的写法?
排除直接计算后将结果插入的方法。
请各位指点!
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);
这么写显然是不对的,请教正确的写法?
排除直接计算后将结果插入的方法。
请各位指点!
2、插入后再写一个update语句来更新。
总的来看,上面的方法不如直接计算后插入数据好。
create or replace trigger tr_a
after insert on tmp
declare
begin
update tmp set b_date=a_date+15;
end;
第二中:建立触发器。
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;
然后竟然跳不出来了!
我对触发器了解很浅,请教您一下这个触发器到底该怎么写?
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;
对NEW和OLD的引用,都需要前面加冒号
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;
values(to_date('2010/1/1','yyyy/mm/dd'),to_date('2010/1/1','yyyy/mm/dd')+15,123);
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
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;