现想把一个普通表(TAB_A)中的数据转存到分区表(TAB_B)中,两个表的字段完全一致,但因表中有一LONG ROW类型字段,所以 insert into TAB_B(....) select * from TAB_A 或 update 语句都不能用,请问有什么办法解决? 

解决方案 »

  1.   

    分区表不能含有long类型,改成lob试试。根据自己需要选blob或者clob
      

  2.   

    TAB_B中已改成了blob.但TAB_A中是LONG RAW
      

  3.   

    SQL> create table PART_TAB_EXAMPLE
      2  (
      3    V NUMBER,
      4    B NUMBER,
      5    C bLOB
      6  )
      7  partition by range (V)
      8  (
      9    partition P1 values less than ('11')
     10      tablespace TEST1
     11      pctfree 10
     12      pctused 40
     13      initrans 1
     14      maxtrans 255
     15      storage
     16      (
     17        initial 64K
     18        minextents 1
     19        maxextents unlimited
     20      ),
     21    partition P2 values less than ('21')
     22      tablespace TEST2
     23      pctfree 10
     24      pctused 40
     25      initrans 1
     26      maxtrans 255
     27      storage
     28      (
     29        initial 64K
     30        minextents 1
     31        maxextents unlimited
     32      )
     33  );
     
    Table created
     
    SQL> 
    SQL> create table tt1
      2  (
      3    V NUMBER,
      4    B NUMBER,
      5    C LONG RAW
      6  );
     
    Table created
     
    SQL> 
    SQL> INSERT INTO part_tab_example
      2  SELECT v,b,c FROM tt1;
     
    INSERT INTO part_tab_example
    SELECT v,b,c FROM tt1
     
    ORA-00997: illegal use of LONG datatype
     
    SQL> ALTER TABLE tt1 MODIFY c BLOB;
     
    Table altered
     
    SQL> 
    SQL> INSERT INTO part_tab_example
      2  SELECT v,b,c FROM tt1;
     
    0 rows inserted
     
    SQL> 
      

  4.   

    如果tab_a不能转换类型的话,参照下下面的过程
    ALTER TABLE Long_tab NOLOGGING;ALTER TABLE Long_tab MODIFY (long_col CLOB [DEFAULT <default_val>]) LOB (long_col) STORE AS (NOCACHE NOLOGGING);Note that you must also specify NOCACHE when you specify NOLOGGING in the STORE AS clause.ALTER TABLE Long_tab MODIFY LOB (long_col) (CACHE);ALTER TABLE Long_tab LOGGING;
      

  5.   

    还可以这样试试
    SQL> desc part_tab_example
    Name Type   Nullable Default Comments 
    ---- ------ -------- ------- -------- 
    V    NUMBER Y                         
    B    NUMBER Y                         
    C    BLOB   Y                         
     
    SQL> desc tt1
    Name Type     Nullable Default Comments 
    ---- -------- -------- ------- -------- 
    V    NUMBER   Y                         
    B    NUMBER   Y                         
    C    LONG RAW Y                         
     
    SQL> 
    SQL> INSERT INTO part_tab_example
      2  SELECT v,b,to_lob(c) FROM tt1;
     
    0 rows inserted
     
    SQL>