公司实习后最后出个这样的问题,要求用oracle的jobs来实现
哎,本人对于oracle完全是个新手啊,对jobs完全不了解!求各位大侠帮下忙啊,谢谢了
啊啊 ~不然要被炒了,我的命运把握在你们的手中!oracle表A结构如下且表中如果有以下三条记录:
Mobile 用户号码     InTime 操作时间           Flag 是否已生成日志(默认值为0)         BillType 操作类型(默认值为10   允许输入20或100)
13637401414        2008-01-01 23:53:01              0                                     10
13637401414        2008-01-02 10:22:01              0                                     20
13637401414        2008-01-03 17:26:01              0                                     100
每15分钟扫描一次A表将这15分钟内产生的记录(1天生成96个批次的日志文件)
以下面的形式写到日志文件中日志文件命名规则如下UB+年份+月份+日期+_+批次 
以.txt结尾(UB_20080101 _01.txt)日志内容格式及格式示例如下:
(CallBillV1.01+年份+月份+日期+:+小时+分钟+秒钟)
类型标识|手机号码|手机号码|手机号码|手机号码|手机号码|时间|0|时间|操作类型   CallBillV1.01 20080101:235322
8001|13637401414|13637401414|13637401414|13637401414|13637401414|20080101:235301|0|20080101:235301|10
8002|13637401414|13637401414|13637401414|13637401414|13637401414|20080102:102201|0|20080102:102201|20
8003|13637401414|13637401414|13637401414|13637401414|13637401414|20080103:172601|0|20080103:172601|100类型标识是与操作类型属性相关的   当billtype=10那么类型标识等于8001, billtype=20 类型标识=8002
billtype=100 类型标识=8003

解决方案 »

  1.   

    这个主要用utl_file.put_line写文件。
    你的文件格式好乱,为什么每一行要重复写手机号码。格式能不能写清楚点?
      

  2.   

    建议楼主建立一个缓冲表B,里面存储15分钟内产生的记录
    再送你你一个job应用的示例
    首先建立存储过程
    create or replace procedure InsertLowpower is
     sourceMaxInTime Date;--源表时间
     targetMaxInTime Date;--缓冲表时间
    begin
      select max(InTime) into sourceMaxInTime from A;
      select max(InTime) into targetMaxInTime from B;
      if(targetMaxInTime<sourceMaxInTime) then
        insert into B 
          select * from A where InTime>targetMaxInTime       
        commit;
      end if;  
    end;
    然后建立job
    begin
      sys.dbms_job.submit(job => :job,
                          what => 'Insertlowpower;',
                          next_date => to_date('01-03-2008 01:00:00', 'dd-mm-yyyy hh24:mi:ss'),
                          interval => 'sysdate-15/1440 ');
      commit;
    end;
    /
    下面就是根据B表数据导出所需要的文本格式了。
      

  3.   

    使用包体utl_file写文件,文件只能在数据库服务器上。
    若要导出文本数据到其他地方,建议使用SPOOL。
      

  4.   

    用job调用执行如下代码
       spool  filename
             select * from table     where time  between begintime and endtiem
      begintime和endtime为变量查下 job 文档,把这调用出来吧
         
      

  5.   

    spool不是PL/SQL的关键字,而是外部命令。
    因此不能使用job调用spool。windows下,可以使用任务计划,定期执行批处理文件(内含spool脚本);
    或者linux下,可以使用crontab,定期执行shell脚本(内含spool脚本)。