用诸如PB之类的程序使用两个事务,分别连接ORACLE和SQL SERVER,然后根据不同的表名取相关数据,从一个数据库导入另外一个数据库.

解决方案 »

  1.   

    问题是zg.acc_bill_079320080402的表名是动态生成的,比如今天是20080403,那么zg.acc_bill_079320080403是不存在的,要等到20080404才会删除zg.acc_bill_079320080402表再生成zg.acc_bill_079320080403
      

  2.   

    这个也不是难事,只要你的规则定下来就行了
    sql2005里面的ssis可以用变量来读取源数据的,只要按照你的规则来就可以抽取相应的表的数据了
      

  3.   

    我用的是sql2000,有没有详细的操作方法呢
      

  4.   

    2000里面我没研究过 不知道能不能动态写sql语句来读取源数据的?
    这个只好你自己看一下了,2000我手头也没有
      

  5.   


    现在在ORACLE有一张表,表名是按日期来命名的 zg.acc_bill_079320080402,我现在想每天自动从ORACLE按日期通过DTS包导入数据,比如:今天是20080403,我就导入zg.acc_bill_079320080402的数据,到了明天就自动导入zg.acc_bill_079320080403的数据,请问有实现的可能吗?
    --------------------------------------------
    那我问你,今天是4月3号,你今天要取哪个表?zg.acc_bill_079320080402今天的日期减一不就得到zg.acc_bill_079320080402表了?select tbname = 'zg.acc_bill_0793' + convert(varchar(8),dateadd(dd,-1,getdate()),112)/*
    tbname                   
    ------------------------ 
    zg.acc_bill_079320080402(所影响的行数为 1 行)
    */所以说,这是个逻辑问题.
      

  6.   

    问题是怎么用在DTS包中呢,用CONVERT好像不行,在ORACLE用trunc(sysdate-1)就可以了吧
      

  7.   

    DTS包中的语句应该是ORACLE语句吧,这里取的只是一个tb_name的值。
    如果要在ORACLE中用到select * from zg.acc_bill_079320080403的表,这个怎么取?
      

  8.   

    思路:
     取得动态表名的数据---》插入目的表名 (不同DB间可以用 database link)参考如下代码:
     1  declare
      2  type empcurtype is ref cursor;
      3  emp_cur empcurtype;
      4  emp_record emp%rowtype;
      5  sql_stat varchar2(200);
      6  begin
      7  sql_stat:='select * from emp where deptno=:dno';   ----动态表名
      8  open emp_cur for sql_stat using &dno;
      9  loop
     10  fetch emp_cur into emp_record;                     ----插入目的表
     11  exit when emp_cur%notfound;
     12  dbms_output.put_line('Employee:'||emp_record.ename||',salary:'||emp_record.sal);
     13  end loop;
     14* end;
    SQL> /