我有这样一个表,里面有一个字段msg,里面是有关于销售及其中促销的信息,不同的信息之间,用"|"隔开,就像这样"20070401|Seord102344|01112|3|E0002|180|500",这个例子中,数据的格式是"日期|销售单据号|产品编号|促销编号|单价|总金额".
请问,怎样在oracle里面设置触发器,把这些信息分开,再写入另外的表中?

解决方案 »

  1.   

    create or replace trigger trg_insert
    after Insert on a
    for each row
    begin
        declare
          s1 varchar2(100);
          s2 varchar2(100);
          s3 varchar2(100);
          s4 varchar2(100);
          s5 varchar2(100);
          s6 varchar2(100);
          s7 varchar2(100);
          i int;
          S VARCHAR2(1000);
        begin
        end;
        if inserting then  
          s:=:new.msg;   
          i:=Instr( s,'|' );
          s1:=substr(s,1,i-1);
          s:=substr(s,i+1,length(s)-i);
          i:=InStr( s,'|');
          s2:=substr(s,1,i-1);
          s:=substr(s,i+1,length(s)-i);
          i:=InStr( s,'|');
          s3:=substr(s,1,i-1);  
          s:=substr(s,i+1,length(s)-i);
          i:=InStr( s,'|');
          s4:=substr(s,1,i-1);  
          s:=substr(s,i+1,length(s)-i);
          i:=InStr( s,'|');
          s5:=substr(s,1,i-1);  
          s:=substr(s,i+1,length(s)-i);
          i:=InStr( s,'|');
          s6:=substr(s,1,i-1);  
          s7:=substr(s,i+1,length(s)-i);
          insert into tableb select s1,s2,s3,s4,s5,s6,s7 from dual;
        end if;
      end;
    end;
      

  2.   

    楼上的方法就可以。instr和substr结合使用,判断位置,读取。
      

  3.   

    hongqi162(失踪的月亮)  
    不错 不错