本人从未接触过oracle,现在需要用一个触发器,请各位大大帮忙。有表如下:
CREATE TABLE "ME"."TABLE1"("ID" LONG NOT NULL,"NOTES" VARCHAR2(500 BYTE),"PRINTDATE" DATE,"PRINTMAN" VARCHAR2(10 BYTE))现在要在NOTES列上做一个UPDATE触发器,当NOTES写入内容时,解析NOTES的内容,分析出打印人和打印时间分别更新到PRINTDATE和PRINTMAN,NOTES的内容格式大致如下:
打印人:XXX,打印时间:XXXXXXXXXXXXX
CREATE TABLE "ME"."TABLE1"("ID" LONG NOT NULL,"NOTES" VARCHAR2(500 BYTE),"PRINTDATE" DATE,"PRINTMAN" VARCHAR2(10 BYTE))现在要在NOTES列上做一个UPDATE触发器,当NOTES写入内容时,解析NOTES的内容,分析出打印人和打印时间分别更新到PRINTDATE和PRINTMAN,NOTES的内容格式大致如下:
打印人:XXX,打印时间:XXXXXXXXXXXXX
cREATE TABLE "TABLE1"("ID" LONG NOT NULL,"NOTES" VARCHAR2(500 BYTE),"PRINTDATE" DATE,"PRINTMAN" VARCHAR2(10 BYTE))
insert into table1(id,notes) values(1,'2005-10-10aaa');
--建立触发器
create or replace trigger trg_update
before update
on table1
for each row
begin
if updating('notes') then
:new.printdate:=to_date( substr(:new.notes,1,10),'yyyy-MM-dd' );--相应的字符串拆分可能需要用到instr
:new.printman:=substr(:new.notes,11,length(:new.notes)-10);--相应的字符串拆分可能需要用到instr
end if;
end;
--更新
update table1 set notes='2005-10-10aaa1a';
--执行查询
select * from table1;
--执行结果
<Long> 2005-10-10aaa1a 2005-10-10 aaa1a
--删除测试数据
drop table table1;
2、ID不需要用LONG吧?会有这么多的数据吗?varchar2(15)或者number(15)足够大了吧?