本人从未接触过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

解决方案 »

  1.   

    --建立测试数据
    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.   

    1、如楼上所说,根据数据库的范式要求,没有满足第一范式。
    2、ID不需要用LONG吧?会有这么多的数据吗?varchar2(15)或者number(15)足够大了吧?