DECLARE
 v_sum Varchar2(25):='sum '; 
 v_tmp Varchar2(25);
 BEGIN
         v_tmp=concat(v_qty,to_char(sysdate,'yymmdd'));
 Alter Table aaaa Add (v_tmp Number(22,5)) ;
 END;
上面代码无法正常执行,从上面可以看出我的需求,就是想每天向aaaa自动插入一新列,列名称是变化的,能不能实现啊?

解决方案 »

  1.   

    每天自动增加一列,lz好想法,这是什么业务逻辑,很夸张的说
    DECLARE
     v_sum Varchar2(25):='sum'; 
     v_tmp Varchar2(25);
     BEGIN
         v_tmp:=concat(v_sum,to_char(sysdate,'yymmdd'));
         execute immediate 'Alter Table aaaa Add (' || v_tmp || ' Number(22,5))';
     END;
      

  2.   


    提示无效的数据类型在 line 6。。
      

  3.   

    我测试语句没有问题,你试着直接执行下面的语句看
    Alter Table aaaa Add (sum111114 Number(22,5))
      

  4.   


    DECLARE
     v_sum Varchar2(25):='sum '; 
     v_tmp Varchar2(25);
     BEGIN
             v_tmp:=concat(v_sum,to_char(sysdate,'yymmdd'));
            execute immediate 'Alter Table aaaa Add('||v_tmp||'Number(22,5))';
     END;PLSQL执行,说在第6行有无效的数据类型
      

  5.   

     execute immediate 'Alter Table aaaa Add('||v_tmp||'Number(22,5))';注意加空格 在 v_tmp 和 Number之间
    --》execute immediate 'Alter Table aaaa Add( '||v_tmp||' Number(22,5))';
      

  6.   

    DECLARE
     v_sum Varchar2(25):='sum '; --多了一个空格
     v_tmp Varchar2(25);
     BEGIN
      v_tmp:=concat(v_sum,to_char(sysdate,'yymmdd'));
      execute immediate 'Alter Table aaaa Add('||v_tmp||' Number(22,5))';-- Number(22,5)前少了一个空格
    END;