create table A_TEST1
(
  V1 VARCHAR2(100),
  VD DATE
);
create table A_TEST2
(
  COUNTS NUMBER,
  CDATE  DATE
);--------job调用这个往test1插入数据
create or replace procedure a_in_test1
as
       stemp varchar(100);
begin
  select to_char(trunc(dbms_random.value(1,5000))) into stemp from dual;
  insert into a_test1 values (stemp,sysdate);
end a_in_test1;-------创建一个触发器监控 test 插入数据
create or replace trigger a_test1_after
  after insert on A_TEST1  
  for each row
begin
   A_IN_TEST2;
end ;-----当test1有数据插入时候触发器是调用一下过程
create or replace procedure a_in_test2
as
       counts number;
begin
  select count(*) into counts from a_test1;
  insert into a_test2 values (counts,sysdate);
end a_in_test2;以上编译都成功了,但在test1插入数据时候却提示触发器失败失败行
select count(*) into counts from a_test1;错误信息:
表test1发生了变化,触发器/函数不能读它难道我的逻辑有问题???

解决方案 »

  1.   

    为什么不在job调用的存储过程的最后加上trigger要完成的工作呢?
      

  2.   

    谢谢,基本明白了!另外请问下我定时job没天执行 pro1 更新数据表;
    然后再执行pro2 pro3 pro4... 来计算数据得到新表!
    能不能触发器监控pro1执行完成后自动执行pro2 pro3 pro4... 呢?因为我定时job执行pro1;pro2;pro3...这样是出错的!
    但我手动一个一个执行pro1;pro2;pro3...却是没有问题的!!
      

  3.   

    job里执行多个过程可以使用块调用.
    begin
     proc1;
     proc2;
     proc3;
    end;
      

  4.   


    declarev_job number;begindbms_job.submit(v_job,'UP1;UP2;UP3;',trunc(sysdate)+07/24+20/24/60+01/24/60/60,'sysdate+1');
    --每天7点20执行
    commit;end;这个是我原来的jobup1是更新表数据
    up2和up3是处理表数据的!!!!
    如何改成块执行呢?
      

  5.   


    因为我定时job执行pro1;pro2;pro3...这样是出错的!其实也可以 在what=>'pro1;pro2;pro3;'
    可以在创建过程 里面执行pro1;pro2;pro3...在用job调用这个过程 
      

  6.   

    declarev_job number;begindbms_job.submit(v_job,'begin UP1;UP2;UP3; end;',trunc(sysdate)+07/24+20/24/60+01/24/60/60,'sysdate+1');
    --每天7点20执行
    commit;end;
      

  7.   

    这2天观察job的运行!!!还是会出错1!
      

  8.   

    我最近也在研究job,不过真正的要管理好job的运行,数据库权限蛮高的!