当前位置: 代码迷 >> Oracle开发 >> 关于数据采集的PL/SQL解决方法
  详细解决方案

关于数据采集的PL/SQL解决方法

热度:82   发布时间:2016-04-24 07:43:00.0
关于数据采集的PL/SQL
功能 每小时向 表 BIDR查找当前时间前一个小时的数据 放入 windy_detail_yyyy_mm_dd 表中
下面是 BIDR的表结构
 create table "BE0803"."BIDR"(
  "ID" NUMBER(10) primary key,
  "LAB_IP" VARCHAR2(255),
  "LOGIN_DATE" TIMESTAMP(6),
  "LOGIN_NAME" VARCHAR2(255),
  "LOGIN_IP" VARCHAR2(255),
  "TIME_DURATION" NUMBER(19),
  "LOGINOUT_DATE" TIMESTAMP(6),
  );
 windy_detail_yyyy_mm_dd 和 bidr一样  
下面是我写的 PROCEDURE
创建成功 运行也无报异常 就是找不到数据 不知道那里出错 各位帮我看看 (下面是测试代码所以时间字定义)
create or replace procedure bidr_to_detail( hh varchar2)
as
  id bidr.ID%type;
  login_name bidr.LOGIN_NAME%type;
  login_ip bidr.LOGIN_IP%type;
  login_date bidr.LOGIN_DATE%type;
  loginout_date bidr.LOGINOUT_DATE%type;
  lab_ip bidr.LAB_IP%type;
  time_duration bidr.TIME_DURATION%type;
  num number;
  cid1 integer;
  cid2 integer;
  res1 integer;
  res2 integer;
  t1 varchar2(25);
  t2 varchar2(25);
  selectsql varchar2(255);
  isnertsql varchar2(255);
  d1 date;
  d2 varchar(25);
begin
  t1:='hh';
  t2:='yyyy_mm_dd:hh';
  cid1:=dbms_sql.open_cursor;
  d1:=to_date(hh,'yyyy_mm_dd:hh');
  selectsql:='select id ,login_ip,login_date,login_name,login_ip,time_duration,loginout_date from bidr where trunc(loginout_date,''hh'')=to_date('''||hh||''',''yyyy_mm_dd:hh'')';
  dbms_sql.parse(cid1,selectsql,dbms_sql.native);
  dbms_sql.define_column(cid1,1,id);
  dbms_sql.define_column(cid1,2,lab_ip,255);
  dbms_sql.define_column(cid1,3,login_date);
  dbms_sql.define_column(cid1,4,login_name,255);
  dbms_sql.define_column(cid1,5,login_ip,255);
  dbms_sql.define_column(cid1,6,time_duration);
  dbms_sql.define_column(cid1,7,loginout_date);
  res1:=dbms_sql.execute(cid1);
  cid2:=dbms_sql.open_cursor;
  d2:=to_char(d1,'yyyy_mm_dd');
  isnertsql:='insert into windy_detail_'||d2||' values(:id,:lab_ip,:login_date,:login_name,:login_ip,:time_duration,:loginout_date)';
  dbms_sql.parse(cid2,isnertsql,dbms_sql.native);
  loop
  if (dbms_sql.fetch_rows(cid1))>0 then
  dbms_sql.column_value(cid1,1,id);
  dbms_sql.column_value(cid1,2,lab_ip);
  dbms_sql.column_value(cid1,3,login_date);
  dbms_sql.column_value(cid1,4,login_name);
  dbms_sql.column_value(cid1,5,login_ip);
  dbms_sql.column_value(cid1,6,time_duration);
  dbms_sql.column_value(cid1,7,loginout_date);
  dbms_sql.bind_variable(cid2,':id',id);
  dbms_sql.bind_variable(cid2,':lab_ip',lab_ip);
  dbms_sql.bind_variable(cid2,':login_date',login_date);
  dbms_sql.bind_variable(cid2,':login_name',login_name);
  dbms_sql.bind_variable(cid2,':login_ip',login_ip);
  dbms_sql.bind_variable(cid2,':time_duration',time_duration);
  dbms_sql.bind_variable(cid2,':loginout_date',loginout_date);
  res2:=dbms_sql.execute(cid2);
  else
  exit;
  end if;
  end loop;
  dbms_sql.close_cursor(cid1);
  相关解决方案