TARG_ID NUMBER(10)
YEAR NUMBER(4)
PLACE_NODE NUMBER
PLACE_TYPE NUMBER(3)
AREA_CODE NUMBER(5)
MON_1 NUMBER
MON_2 NUMBER
MON_3 NUMBER
MON_4 NUMBER
MON_5 NUMBER
MON_6 NUMBER
MON_7 NUMBER
MON_8 NUMBER
MON_9 NUMBER
MON_10 NUMBER
MON_11 NUMBER
MON_12 NUMBER
TYPE_ID NUMBER(2)
表结构。
这个是一个过程。我想是!取出某个月的数据比如取3月份的数据那么久插入到MON_3里面请问怎么判断插入!!

解决方案 »

  1.   

    我一个想法是!改下字段名!改成mon_01这样然后我设个变量 V_NUMBER:=SUBSTR(MONTH_ID,5,2) 
    然后INSERT/*+*/ INTO tablename
                 (    TARG_ID, 
                      MON_||v_number||
                       ) 这样能读取的到V_NUMBER吗  我还不知道行不行求牛人有没有其他的办法!!
      

  2.   

    没这么设计的表的。如此一来,只能 update,不是insert。if  月份  = 3 月 then
      update
    end if
      

  3.   

    create table TF_CONTRACT_TARGET_DATA
    (
      targ_id    NUMBER(10),
      year       NUMBER(4),
       mon_1      NUMBER,
      mon_2      NUMBER,
      mon_3      NUMBER,
      mon_4      NUMBER,
      mon_5      NUMBER,
      mon_6      NUMBER,
      mon_7      NUMBER,
      mon_8      NUMBER,
      mon_9      NUMBER,
      mon_10     NUMBER,
      mon_11     NUMBER,
      mon_12     NUMBER, )--要被插入数据的表
    create table table2
    (   year_id   number(4),
        month_id  number(6),
       numbertwo varchar2(30)
    );insert into table2(year_id,month_id,numbertwo) values('201203','111111');
    insert into table2(year_id,month_id,numbertwo) values('201203','222222');
    insert into table2(year_id,month_id,numbertwo) values('201203','333333');
    insert into table2(year_id,month_id,numbertwo) values('201203','444444');
      

  4.   

    insert into table2(year_id,month_id,numbertwo) values('2012','201203','111111');
    insert into table2(year_id,month_id,numbertwo) values('2012','201203','222222');
    insert into table2(year_id,month_id,numbertwo) values('2012','201203','333333');
    insert into table2(year_id,month_id,numbertwo) values('2012','201203','444444');年数据忘记加了。
      

  5.   

    strsql := 'INSERT INTO tablename(TARG_ID,MON_'||v_number||') values(:p,:p)';
    execute immediate strsql using 放TARG_ID的值的变量 , 放月份的值的变量;
      

  6.   

    month_id的大小是4,你插入却是6位,你有没有测过的?你想要的结果是什么,给table1插入四条记录,月份的字段值对应为table2的月份和值?
      

  7.   

    说错了,month_id大小 没问题
      

  8.   

    是的!几月份的数据就插入到那个MON_月份字段!
      

  9.   

    看看下面这个是不是你要的declare
    v_insert_sql varchar2(4000);
    begin
      for i in (select * from table2) loop
         v_insert_sql := 'insert into TF_CONTRACT_TARGET_DATA(year,mon_'||trim(leading '0' from substr(i.month_id,5,2))||')values(:1,:2)';
         execute immediate v_insert_sql using i.year_id,i.numbertwo;
         commit;
      end loop;
    end;    TARG_ID  YEAR      MON_1      MON_2      MON_3      MON_4      MON_5      MON_6      MON_7      MON_8      MON_9     MON_10     MON_11     MON_12
    ----------- ----- ---------- ---------- ---------- ---------- ---------- ---------- ---------- ---------- ---------- ---------- ---------- ----------
                 2012                           111111                                                                                         
                 2012                           222222                                                                                         
                 2012                           333333                                                                                         
                 2012                           444444                                                                                         
     
      

  10.   


    这种循环insert为什么还设计那么多的月份字段呢???
    何等的浪费