公司实习后最后出个这样的问题,要求用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
哎,本人对于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
你的文件格式好乱,为什么每一行要重复写手机号码。格式能不能写清楚点?
再送你你一个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表数据导出所需要的文本格式了。
若要导出文本数据到其他地方,建议使用SPOOL。
spool filename
select * from table where time between begintime and endtiem
begintime和endtime为变量查下 job 文档,把这调用出来吧
因此不能使用job调用spool。windows下,可以使用任务计划,定期执行批处理文件(内含spool脚本);
或者linux下,可以使用crontab,定期执行shell脚本(内含spool脚本)。