CREATE TABLE LAY_TROUGH_BATCH_REAL_INFO(
BATCHNO NUMBER(10,0) NOT NULL,
DATET DATE NOT NULL,
Breed1 VARCHAR2(20) NULL,
Breed2 VARCHAR2(20) NULL,
Breed3 VARCHAR2(20) NULL,
Breed4 VARCHAR2(20) NULL,
Breed5 VARCHAR2(20) NULL,
Breed6 VARCHAR2(20) NULL,
Breed7 VARCHAR2(20) NULL,
Breed8 VARCHAR2(20) NULL,
Breed9 VARCHAR2(20) NULL,
Breed10 VARCHAR2(20) NULL,
Weight1 NUMBER(10,4) NULL,
Weight2 NUMBER(10,4) NULL,
Weight3 NUMBER(10,4) NULL,
Weight4 NUMBER(10,4) NULL,
Weight5 NUMBER(10,4) NULL,
Weight6 NUMBER(10,4) NULL,
Weight7 NUMBER(10,4) NULL,
Weight8 NUMBER(10,4) NULL,
Weight9 NUMBER(10,4) NULL,
Weight10 NUMBER(10,4) NULL,
MINE NUMBER(10,4) NULL,
COKE NUMBER(10,4) NULL,
PRIMARY KEY(BATCHNO,DATET)
);CREATE TABLE LAY_CONSUME(
FURNACEID          VARCHAR2(2) NOT NULL ,
BATCHNO            NUMBER(10) NOT NULL ,
DATET              DATE  NOT NULL ,
MINE               NUMBER(10,4),
COKE               NUMBER(10,4));CREATE TABLE LAY_CONSUME_child(
FURNACEID            VARCHAR2(2) NOT NULL ,
BATCHNO              NUMBER(10) NOT NULL ,
DATET                DATE NOT NULL ,
MATERIALCODE         VARCHAR2(10),
weight               NUMBER(10,4));先说一下这三个表的关系:
LAY_TROUGH_BATCH_REAL_INFO是源表,后两个表就是从这个表取数据,它的Breed1-breed10与weight1-weight10对应,也就是breed1不为空或'0'的情况下,把breed1,weight1存入LAY_CONSUME_child的MATERIALCODE和weight里,也就是说一条LAY_TROUGH_BATCH_REAL_INFO表的记录,在LAY_CONSUME_child里可能有1-10条,LAY_CONSUME表就只对应LAY_TROUGH_BATCH_REAL_INFO的相同字段(FURNACEID不管它)现在就是要写一个trigger,把每一条LAY_TROUGH_BATCH_REAL_INFO记录分成1条LAY_CONSUME记录和n(1-10)条LAY_CONSUME_child记录不过这个trigger的触发是在一个job里面的表comm_receive更新后,job每隔1分钟更新一次comm_receive表,触发器就是要在comm_receive表更新后执行各位有什么方法吗???谢谢了

解决方案 »

  1.   

    create procedure pro
    as
    cursor t_sor is
    select * from LAY_TROUGH_BATCH_REAL_INFO;
    str varchar2(100);
    type t is ref cursor;
    v t;
    v_Breed varchar2(20);
    v_Weight NUMBER(10,4)
    begin
    insert into LAY_CONSUME select BATCHNO,DATET,MINE,COKE from LAY_TROUGH_BATCH_REAL_INFO;
    for v_sor in t_sor loop
    for i in 1..10 loop
    str:='select Breed'||i||',Weight'||i||' from LAY_TROUGH_BATCH_REAL_INFO where BATCHNO'||v_sor.BATCHNO;
    open v for str;
    loop
    fetch v into v_Breed,v_Weight;
    exit when v%notfound;
    insert into LAY_CONSUME_child (BATCHNO,DATET,MATERIALCODE,weight) values(v_sor.BATCHNO,v_sor.DATET,v_Breed,v_Weight);
    end loop;
    close v;
    end loop;
    delete from LAY_TROUGH_BATCH_REAL_INFO;
    commit;
    end;
    /
    declare
    job1 number;
    begin
    dbms_job.submit(job1,'pro;',sysdate,'sysdate+1/1440');  --每天1440分钟,即一分钟运行pro过程一次
    commit;
    end;
    /
      

  2.   

    这是个过程!!!里面的代码可以放到trigger里面吧
      

  3.   

    没必要放到trigger,你不是每分钟执行一次吗?
      

  4.   

    我知道,可pm要用trigger,我也没办法