db1数据库                              db2数据库
A表(a,b,c,d,t)    t是时间,          A1表(a,c,d,b,t)  t 是XX年1月 
                                     A2表(a,c,d,b,t)  t 是XX年2月
                                            ......求存储过程

解决方案 »

  1.   


    begin
      for rec in(select distinct trunc(t,'dd') logdate from a)
      loop
       execute immediate 'create table A'|| to_char(rec.logdate,'yyyymmdd')
                         ||' as select * from A where A.t >= '
                         || rec.logdate 
                         ||' and A.t < '
                         || rec.logdate + 1
                         || ';';
       end loop;                       
      end;
      

  2.   

    我按照本地的情况修改了一下
    create or replace procedure fenge(beginmonth date)
    isbegin
      for rec in(select distinct trunc(begin_date,'mm') beginmonth from ow_cyclebill)
      loop
       execute immediate 'create table ow_cyclebill'||to_char(rec.beginmonth,'yyyymm')                     ||' as select * from ow_cyclebill  where ow_cyclebill.begin_date >= '
                         || rec.beginmonth
                         ||' and ow_cyclebill.begin_date < '
                         || rec.beginmonth + 1
                         || ';';
       end loop;
    end;执行后提示   execute immediate 这一行错误numeric or value error: character to number conversion error
      

  3.   


    --修改一下,忘记 rec.logdate 拼接后变成字符串了
    --要修改为拼接后的结果为  to_date(rec.logdate,'xxxxxxx) 这样的
    --修改如下begin
      for rec in(select distinct trunc(t,'dd') logdate from a)
      loop
       execute immediate 'create table A'|| to_char(rec.logdate,'yyyymmdd')
                         ||' as select * from A where A.t >= '
                         ||'to_date('''
                         || to_char(rec.logdate,'yyyy-mm-dd')
                         ||''',''yyyy-mm-dd'')' 
                         ||' and A.t < '
                         ||' to_date('''
                         || to_char(rec.logdate + 1,'yyyy-mm-dd')
                         ||''',''yyyy-mm-dd'')'
                         || ';';
       end loop;                       
      end;
      

  4.   

    小弟初学,调试不通,有些不明白。
    1.要求是按月分表 如a201010,a201011.....,不是按日,
    2.后面的to_char(rec.logdate + 1,'yyyy-mm-dd') 应该改为||  to_char(to_char(rec.beginmonth,'yyyymm')+1)3.还有execute immediate 'create table A'|| to_char(rec.logdate,'yyyymmdd')
    这里的|| 后面的空格应该不要的把,组成新的表名a201010
    4.很多'''' 引号为什么还要打三个,||后面一个引号够了吧。 中间的''yyyy-mm-dd''用'yyyy-mm-dd'不可以么?
      

  5.   


    begin
      for rec in(select distinct trunc(t,'mm') logdate from a)
      loop
       execute immediate 'create table A'|| to_char(rec.logdate,'yyyymm')
                         ||' as select * from A where A.t >= '
                         ||'to_date('''
                         || to_char(rec.logdate,'yyyy-mm')
                         ||''',''yyyy-mm'')' 
                         ||' and A.t < '
                         ||' to_date('''
                         || to_char(add_months(rec.logdate,1),'yyyy-mm')
                         ||''',''yyyy-mm'')'
                         || ';';
       end loop;                       
      end;
    3.还有execute immediate 'create table A'|| to_char(rec.logdate,'yyyymmdd')
    这里的|| 后面的空格应该不要的把,组成新的表名a201010
    --后面没有空格A||B 和 A||    B 是一样的, A||' '||B 就带空格了。4.很多'''' 引号为什么还要打三个,||后面一个引号够了吧。 中间的''yyyy-mm-dd''用'yyyy-mm-dd'不可以么?
    --因为最终要连接出 to_date(字段,'yyyy-mm') 这样的字符串来,在连接的时候,外面需要再加'',即
    --'拼接结果',而在''里面是要用两个连续的单引号代表一个单引号的。
    --如,||''',''yyyy-mm'')' 表达的意思是将字符串 【','yyyy-mm')】连接上去,
    ----而oracle中表示字符串用单引号表示【''】,因此需要在两边增加单引号,
    ----而一旦增加单引号了,里面【','yyyy-mm')】的单引号要全部改为双引号【'',''yyyy-mm'')】
    ----然后两边加单引号表示字符串就变成了 ''',''yyyy-mm'')'
    ----四个单引号的意思是一样的实际上是将一个【'】连接,字符串两边增加【''】里面的【'】变为【''】
    -----最后变为【''''】
      

  6.   

    自己建立了表A,存储过程,
    进入procedures 测试执行后,  提示 这行
    execute immediate 'create table A'|| to_char(rec.logdate,'yyyymm') 
    invalid character
      

  7.   

    execute immediate 'create table A'|| to_char(rec.logdate,'yyyymm')  
    字符串拼接多练练
      

  8.   

    存储过程执行到这行出错了
    报  invalid character  错误,
    请指教哪里有问题?
      

  9.   

    测试时还是报错,ORA-01898 提示精确度说明符过多。自己建了个简化的 环境
    create or replace procedure chuangjian
    (v_id in varchar)
    is
    begin
    if  v_id  = to_char(1,9)
    then
    execute immediate 
    'create table A1 as select * from a'|| ';';                   
    end if ;
    end;
    之前 v_id 是 number 型,执行时 exec  chuangjian(1),报错。 现在全部换成字符型,
    存储过程执行成功,但是表A1没有出现。我想可能都是execute immediate后面的标点问题。
      

  10.   

    如需要阅读该回复,请登录或注册CSDN!6楼的内容为什么看不到呢???