with t as (
select A.NUM_BUY,A.COD_FACT,A.COD_PAYM,A.DAT_BUY FROM BUYM ALEFT JOIN (SELECT COD_FACT,MAX(DAT_BUY) DAT_BUY,max(num_buy) num_buy FROM BUYM where dat_buy <=(select to_char(last_day(add_months(sysdate, -1)),'yyyyMMdd') from dual) GROUP BY COD_FACT) BON B.DAT_BUY=A.DAT_BUY AND B.COD_FACT=A.COD_FACTWHERE B.DAT_BUY=A.DAT_BUY AND B.COD_FACT=A.COD_FACT
     and b.num_buy=a.num_buy
)
select * from buym c
where
c.cod_paym<>(select cod_paym from t where c.cod_fact=t.cod_fact)
and c.dat_buy >(select to_char(last_day(add_months(sysdate, -1)),'yyyyMMdd') from dual)以上是我写的一SQL语句,我想通过这个语句如果查到有资料的话就自动把查到的内容发mail给某个人
所以想写一个程式能每隔一段时间自动来执行判断
数据库是oracle的
这个程式到底该怎么来写?
麻烦各位帮忙了谢谢!

解决方案 »

  1.   

    将其改为存贮过程,再用job定时调用此存贮过程。
      

  2.   

    能詳細點嗎?
    另外我只有這個數據庫的普通權限,可能job沒法創建吧
      

  3.   

    过程:
    1.创建个过程用来发邮件(可以通过utl_smtp)
    2.写个过程来获取你提供的sql的结果集,并把结果作为邮件的body。过程中调用步骤1创建的发邮件的过程,来发送邮件。
    3.通过dbms_job包来创建定时执行的job,job的内容就是执行步骤2创建的过程.
    4.等着收邮件吧。.... :)
      

  4.   


    一段简单的job代码:conn scott/tiger
    declare
    v1 number;
    begin
    dbms_job.submit(v1,'update emp set sal=sal+1;commit;',sysdate,'sysdate+1/24/3600*5');
    end;
    /commit;
      

  5.   


    --job示例:begin
      sys.dbms_job.submit(job => :job,
                          what => 'p_test1;',
                          next_date => to_date('05-11-2008', 'dd-mm-yyyy'),
                          interval => 'TRUNC(SYSDATE+1)');
      commit;
    end;
    /再参考一下:http://www.oracle.com.cn/viewthread.php?tid=19205
    http://hi.baidu.com/zhu410289616/blog/item/a53ff5f8b3f4b55f242df273.html
      

  6.   

    特别是第一个贴子应好好看看,把你的sql揉进此贴的procedure中,然后用job执行。